Я пытаюсь написать скрипт для поиска определенных путей для файлов, устаревших, чем заданное время. Из-за длины списка аргументов я делаю это не напрямую, а записываю найденные файлы в список. На втором этапе я беру этот список и деактивирую эти файлы, план состоит в том, чтобы позже прочитать список 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) Да, это помогло, хорошая мысль, пока я не понимаю, почему отказ от этого переключателя приводит к тройным файлам вместо двойных? 2) Я использовал xargs, но застрял в неполных архивах, потому что tar делает ненормальное поведение с более чем 30 000 файлов. 3) из-за того, что mtime работает по отношению ко второму, который он вызывается, он удалит больше файлов вторым вызовом, чем тот, который ранее был заархивирован первым вызовом.потому что файлы очень важны для документации, я, кроме того, задаюсь вопросом, достаточно ли проверять листинг архивного файла для того, чтобы избавиться от некорруптного архива? – peet
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
1) Думаю, что 2) я закончил с/bin/tar: Список аргументов слишком долго 3) Я подумал об этом, но проверю, что нужно работать от root, пока я работаю из другого каталога (или лучше, независимо от сценария), и каким-то образом мне нравится способ diff :) – peet