2013-10-10 2 views
0

Я пытаюсь разработать команду, которая найдет файлы, которые не были изменены более чем за 6 месяцев, и застегните их одной командой. Впоследствии я хочу удалить все эти файлы и просто архивировать.Zipping и удаление файлов с определенным возрастом

Моя текущая команда, чтобы найти каталоги с файлами является

find /var/www -type d -mtime -400 ! -mtime -180 | xargs ls -l > testd.txt 

Это дало мне все каталоги, включая файлы, которые старше 6 месяцев Теперь я задавался вопросом, есть ли способ сжать все результаты и их удаление впоследствии. Что-то среди линии

find /var/www -type f -mtime -400 ! -mtime -180 | gzip -c archive.gz 

Если кто-то знает правильный синтаксис для достижения этого, я бы хотел узнать. Thakns!

Edit, после нескольких тестов эта команда приведет к повреждению файла

find /var/www -mtime -900 ! -mtime -180 | xargs tar -cf test4.tar 

Любые идеи?

+0

gzip только сжимает отдельные файлы. это НЕ похоже на pkzip, который может объединить несколько файлов в один ZIP-архив. Вам нужно tar и gzip, если вы хотите создать один файл сжатого архива. gzip также удалит исходный несжатый файл, поэтому 'gzip foo.txt' приведет к тому, что на диске будет' foo.txt.gz', а 'foo.txt' больше не будет существовать. –

+0

Не знаете ли вы, какой синтаксис подразумевается в этом текущем сценарии? – Dexirian

+0

'find ... | xargs gzip' или 'find ... -exec gzip {}' –

ответ

0

Перерыв это на несколько отдельных шагов, которые вы можете реализовать и тщательно протестировать отдельно:

  1. Создайте список файлов в архив, а затем удаляется, сохраняются во временный файл
  2. Используйте список из шага 1, чтобы добавить файлы в архивы .tar.gz. Дайте архивируемому файлу имя, соответствующее определенному шаблону, который не будет отображаться в файлах, которые будут архивироваться, и поместите их в каталог за пределами иерархии архивируемых файлов.
  3. Прочтите файлы из .tar.gz и сравните их (или их хэши) с исходными файлами, чтобы убедиться, что вы получили их все без коррупции
  4. Используйте список с шага 1 для удаления файлов. Не используйте шаблон для удаления. Введите защитный код, чтобы предотвратить удаление любого файла, соответствующего шаблону имени файла архива .tar.gz, созданного на этапе 2.

При тестировании скрипта, который может нанести необратимый ущерб, всегда кодируйте опасную команду с ведущим echo и оставьте ее таким образом, пока вы не убедитесь, что все работает. Только тогда удалите echo.

+0

Я сделал ошибку в одной из моих команд и буквально застегнул КАЖДОЙ ОДИН ФАЙЛ на моем сервере, так что теперь у меня возникают головные боли, заставляющие его загружаться. – Dexirian

0

Рассмотрите zip, он должен соответствовать вашим требованиям.

find ... | zip [email protected] archive.zip 

-m (перемещения) удаляет входные каталоги/файлы после создания указанного архива ZIP.

- @ принимает список входных файлов со стандартного ввода.

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

-r (recurse) перемещает структуру каталогов рекурсивно.

-sf (show-files) показывает файлы, на которых будет работать, а затем выйдет.

-t или --from-date работает с файлами, не измененными до указанной даты.

-tt или --before-date работает с файлами, не измененными после или в указанную дату.

Возможно, это может быть сделано find.

zip -mr --from-date 2012-09-05 --before-date 2013-04-13 archive /var/www 
Смежные вопросы