linux, копировать только файлы до определенной даты
Есть ли команда копировать файлы только до определенной даты, скажем, 20120901? Кроме того, я хотел бы сделать это с возможностью cp -p (например, оригинальная временная метка сохраняется).
2 ответа
Да, вы должны быть в состоянии сделать это с помощью комбинации касания и поиска.
# Create a file with the desired timestamp
touch -d 20120901 /tmp/timefile
# Find all files older than that and act on them
find $PATH -type -f -and -not -newer /tmp/timefile -print0 | xargs -0 -i % cp -p % /new/location
Итак, что это делает, это найти все файлы в каталоге $PATH
которые были изменены до 1 сентября 2012 года в 00:00:00 часов и скопировать их все в каталог /new/location
В принятом ответе есть опечатка. -type
должно сопровождатьсяf
и не-f
. Мне тоже это выражение не подошло.
Это сработало для меня:
find <path> -type f -and -not -newer /tmp/timefile | xargs -I '{}' cp -p '{}' <path/to/destination/directory>
Чтобы найти файлы новее, чем файл с отметкой времени, выполните:
find <path> -type f -and -newer /tmp/timefile | xargs -I '{}' cp -p '{}' <path/to/destination/directory>
Кроме того, если вы хотите фильтровать по определенному часу, минуте и секунде, изменитеtouch
часть следующим образом
touch -t [[CC]YY]MMDDhhmm[.SS] /tmp/timefile
например
touch -t 202205040930.00 /tmp/timefile
Затем выполнитеfind
часть.