Назад | Перейти на главную страницу

Перенести файлы старше даты в другой каталог

Я ищу решение для перемещения файлов, которые старше сегодняшнего дня. Мой раздел журнала заполняется, но я не могу их удалить. Они нужны уже давно. В любом случае одно решение, которое я придумал:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Это сработает? Спрашивая из-за "-mtime 365"переместит ли это файлы, которые старше сегодняшнего дня, в новое место?

Спасибо!

Вы почти правы. -mtime 365 будут все файлы, которым ровно 365 дней. Вам нужны те, которым 365 дней или более, что означает добавление + перед таким числом -mtime +365.

Вас также может заинтересовать -maxdepth 1 флаг, который запрещает вам перемещать элементы в подкаталогах.

Если вы хотите быть уверены, что перемещаете только файлы, а не каталоги, добавьте -type f к строке.

В конце строки добавляем \; так что find знает, что это конец выполняемой нами команды.

Итак, строка должна быть такой:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

На всякий случай начните с простого выполнения ls -l вместо mv - таким образом вы можете заранее проверить, получаете ли вы именно те файлы, которые хотите, перед повторным запуском с помощью mv, например:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

Будьте осторожны при использовании вышеуказанных решений, я использовал их и в итоге переместил все файлы во все подпапки !!!!

Эта команда перемещает все файлы в каталог / source и все подпапки в исходный каталог:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

Вместо этого используйте параметр -maxdepth 1 только для файлов в / sourcedirectory.

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

Вы можете использовать приведенную ниже команду с atime, если к файлам часто обращаются.

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

Вы можете использовать эту команду и указать, что вы будете искать только файлы, а не каталог, и файл старше одного года

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

Правильным было бы удалить конечную косую черту из /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;