Использование команды find для поиска файлов и их архивирования с добавленной датой - нужна одна команда find - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь найти файлы, которые были созданы / изменены 30 дней назад, и заархивировал их.Для этого я использую команду Unix Find.Я могу выполнить требование с помощью командной строки ниже.

 find . -type f -mtime +30  -exec basename {} \; | xargs -I file_name echo mv /home/Cyrup/chip/arc_poc/file_name /home/Cyrup/chip/arc_poc/arc/file_name_$(date +%Y%m%d) | ksh

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

find . -type f -mtime +30 -exec mv {} /home/Cyrup/chip/arc_poc/arc/{}_`date +%Y%m%d` \;

Но это не работает.Здесь if {} выступает в качестве заполнителя для всех файлов, которые определены командой find.Тогда я что-то не так делаю при перемещении файлов в архив Dir, переименовав его с датой? ..

Также -mtime - время изменения файла.Есть ли способ, которым мы можем найти файлы на основе времени создания файла.Насколько я знаю, у нас нет никакой опции с командой find.

Спасибо

1 Ответ

2 голосов
/ 13 января 2012

Невозможно сделать это только с помощью команды find. Вы можете написать сценарий переименования и использовать его вместо mv:

find . -type f -mtime +30 -exec appenddate.sh {} \;

с appenddate.sh что-то вроде:

mv $1 $1_`date +%Y%m%d`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...