2013-07-20 1 views
0

Я пытаюсь написать скрипт для поиска определенных путей для файлов, устаревших, чем заданное время. Из-за длины списка аргументов я делаю это не напрямую, а записываю найденные файлы в список. На втором этапе я беру этот список и деактивирую эти файлы, план состоит в том, чтобы позже прочитать список tar и удалить файлы, заархивированные в исходных каталогах.Найти файлы (распечатать в файле списка) tar этот список, проверить архив и удалить источники

Найти конкретные файлы и список написать:
Решение: добавляемые -type е

find /path/to/*/xfiles/* -type f -mtime +8 -print > /tmp/archiv-xfiles.manifest 

это работает правильно, насколько я могу видеть. Список файлов отличается с каждым прогоном, в то время как это будет эффект использования mtime, который работает относительно, я думаю. Теперь я беру список и очернить файлы, перечисленные:

tar -czvPf /tmp/archiv-xfiles.tar.gz --files-from /tmp/archiv-xfiles.manifest 

В этот момент я застрял с архивом, содержащим каждый файл в три раза? Распечатанный список манифеста верен, каждый файл появляется только один раз. Я злой?

Хотя я бы на подобное:

tar -tvf /tmp/archiv-xfiles.tar.gz > /tmp/archiv-xfiles-to-delete.manifest 

Нужен ли мне проверку ошибок здесь, чтобы быть уверенным, не испорченного архива?

diff /tmp/archiv-xfiles.manifest /tmp/archiv-xfiles-to-delete.manifest > /dev/null 
v1=$? 
if [ $v1 == 0 ] ; then 

Теперь я вижу два пути идти дальше, первый. Какой быстрее ?:

cat /tmp/archiv-xfiles-to-delete.manifest | xargs rm -rf 

или второй:

while read line 
do 
rm -f $line   
done < /tmp/archiv-xfiles-to-delete.manifest 

Не знаю, какой из них лучше? Угадайте, используя переключатель tar --remove-files - это нехорошо или сохранить идею?
А остальное:

rm -f /tmp/archiv-xfiles.manifest 
rm -f /tmp/archiv-xfiles-to-delete.manifest 
elif 
echo ERROR, check manifest files! | mail -s ScriptError [email protected] 
fi 

Может быть кто-то может сказать мне, что происходит не так с называя список, в то время как все идеи на весь сценарий действительно оценили. Например, является ли параметр tar «--remove-files» безопасным и надежным способом достижения такого же эффекта, как мой способ листинга контента tar, diff и delete?

ответ

1

1) Что касается разметки списка: вы, вероятно, получаете дополнительные коды, потому что ваш список имеет оба файла и содержит директории. Попробуйте добавить «-type f» к заклинанию поиска, чтобы получить только файлы.

2) Что касается длины списка аргументов, то одна из точек использования xargs - это именно то, что она позаботится об этом; вы можете просто сделать

find ..... -print0 | xargs rm 

3) Я действительно не понимаю, почему вы хотели бы создать список, TAR файлов и восстановить тот же список снова из архива дегтя.

+0

1) Да, это помогло, хорошая мысль, пока я не понимаю, почему отказ от этого переключателя приводит к тройным файлам вместо двойных? 2) Я использовал xargs, но застрял в неполных архивах, потому что tar делает ненормальное поведение с более чем 30 000 файлов. 3) из-за того, что mtime работает по отношению ко второму, который он вызывается, он удалит больше файлов вторым вызовом, чем тот, который ранее был заархивирован первым вызовом.потому что файлы очень важны для документации, я, кроме того, задаюсь вопросом, достаточно ли проверять листинг архивного файла для того, чтобы избавиться от некорруптного архива? – peet

+0

1) Возможно сопоставление файла, dir и parent dir;). 2) У архивов tar нет проблем с 30000 файлами. См. Http://stackoverflow.com/questions/2697213/more-efficient-way-to-find-tar-millions-of-files для пользователя с миллионами. 3) Вижу. Таким образом, tar-файл не просто побочный продукт, он полезен. 4) Как насчет опции -W tar (http://www.gnu.org/software/tar/manual/html_section/verify.html) – Tiago

+0

1) Думаю, что 2) я закончил с/bin/tar: Список аргументов слишком долго 3) Я подумал об этом, но проверю, что нужно работать от root, пока я работаю из другого каталога (или лучше, независимо от сценария), и каким-то образом мне нравится способ diff :) – peet

 Смежные вопросы

  • Нет связанных вопросов^_^