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

28

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

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

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

Спасибо!

mYzk
источник

Ответы:

40

Ты почти прав. -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 {} \;
Дженни Ди говорит восстановить Монику
источник
3
Имейте в виду, что mtimeэто время Модификации (которое звучит примерно так, как вы, вероятно, хотите - большую часть времени это происходит). Если эти журналы часто читаются / используются, возможно, вы захотите их использовать -atime(время последнего доступа).
voretaq7
2
Что делает обратный слеш в конце этой строки?
Бен Лиянаге
1
@BenLiyanage Обратная косая черта является escape-символом для следующей точки с запятой. Точка с запятой означает конец execутверждения. Смотрите справочную страницу для find.
Дженни Ди говорит восстановить Монику
4

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

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

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

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

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
harleygolfguy
источник
Ответ с наибольшим рейтингом содержит эту заметку и предлагает использовать -type f. Вы имели в виду это вместо этого, чтобы означать, что подпапки действительно перемещаются, но их содержимое остается в подпапках вместо того, чтобы быть удаленным из них или ...?
austinian
1
нет, я имею в виду, что 'find' найдет все файлы в / sourcedirectory и все подпапки в этом / sourcedirectory, о которых я тогда не думал. «-Maxdepth 1» ограничивает «поиск» только / sourcedirectory
harleygolfguy
Кстати, я бы отнес это просто к комментарию с самым высоким рейтингом, который был хорошим ответом, но у меня нет репутации. :)
harleygolfguy
0

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

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
cuonglm
источник
Почему он должен использовать rm? Ваша команда удаляет как файлы журнала, так и, возможно, каталог назначения.
Свен
Опс, моя ошибка, я думаю, что @mYzk хочет удалить эти файлы. Отредактировано
cuonglm
0

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

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;
Прадип Канур
источник
0
$ 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/ \;
internetuser2008
источник
В моих тестах я не смог воспроизвести find: missing argumentошибку, однако я согласен с тем, что удаление косой черты с /sourcedirectoryверным.
Guzzijason