Добрый день, имеется 50,000 файлов по ~2МБ
каким образом можно создать архив и сразу удалять, т.е. положил в архив и тут же удалил файл, перешел на второй файл итд.
сейчас делаю так:
find . -mmin -3600 -type f | xargs tar -acvf bkp.tar.gz
find . -mmin -3600 -type f -delete
Это, кстати, алгоритмически неправильно. Если архив будет сжиматься на протяжении десяти минут, то удалятся уже не те же самые файлы. Так что тут всё должно быть переписано.
Судя по логике, тебе нужно переместить найденные файлы в отдельный каталог, а потом этот каталог заархивировать одной командой и после успешной архивации удалить его (хотя можно и проверить всё ещё).
Dima Kim: можно добавить третью строчку (в середку) - проверка архива на целостность. а еще многие архиваторы сами умеют удалять по окончании процесса создания архива. за tar не скажу.
В некоторых архиваторах есть такой ключик командной строки - после успешной архивации удалять все файлы, добавленные в архив.
А у некоторых есть ключик - проверять целостность архива после архивации.
Если добавить эти 2 ключика, то, возможно, вас все устроит.
Если нет такой возможности в tar или оно удаляет раньше, чем проверит целостность архива, то тогда скриптом.
Вариант 2:
Заархивировать.
Проверить целостность архива (эта такая иммитация разархивации, алгоритм полностью распаковывает файл, только никуда не записывает).
Если целостность не нарушена, то удалить файлы.