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часть.

Другие вопросы по тегам