Не способный удалить партию файлов сразу в Linux

Если необходимо удостовериться, что оба процесса закончены прежде, чем продолжиться к следующему шагу, простое решение состояло бы в том, чтобы записать что-то в файл и проверить его. Просто сделайте главу или кошку на файле (со значением по умолчанию 0) и добавьте 1 к первой строке. Если Вы обнаруживаете 2, то оба процесса завершаются. Конечно, дополнение должно быть сделано в самой нижней части Ваших сценариев.

5
задан 16 March 2012 в 12:24
5 ответов

GNU find имеет параметр -delete, который всегда безопасен:

find . -type -f -delete

Как уже говорилось в другом месте, вы также можете использовать xargs, но будьте очень осторожны при его использовании.

find . -type f -print0 | xargs -0 rm -vf
6
ответ дан 3 December 2019 в 01:15

Все остальные ответы предполагают, что вы хотите сохранить каталоги, но из исходного сообщения не ясно, что вы делаете; более того, даже если вы хотите сохранить структуру, вам все равно придется удалить и воссоздать каталоги, потому что файлы каталогов стали очень большими - они не сжимаются, когда вы их очищаете, а их размер значительно замедлит работу с ними в будущем.

Вы учли только

rm -rf log*
2
ответ дан 3 December 2019 в 01:15

Попробуйте

find . -type f | xargs rm -vf
0
ответ дан 3 December 2019 в 01:15

Если вы можете справиться с множеством ошибок, когда rm не может удалить каталоги, вы можете подойти к проблеме с другой стороны

for dir in $(find . -type d)
do
  rm $dir/*
done
1
ответ дан 3 December 2019 в 01:15

Кроме переформатирования раздела, я делаю не вижу более быстрого способа удалить все файлы.

Проблема в том, что у вас огромное количество файлов в этих каталогах (размер в выводе ls -l , который вы предоставляете, огромен!) . Для каждого rm файловая система должна делать следующее:

  1. Запрашивает каталог для номера inode ,
  2. Обновить каталог, чтобы удалить из него файл,
  3. Уменьшает количество ссылок в индексном дескрипторе (см. жесткую ссылку , если вы хотите узнать больше о количестве ссылок),
  4. Если ссылка count равно нулю, удалите данные с диска.

Даже если вы rm каталог, вы избавитесь только от шага №2, описанного выше, потому что вам все равно нужно запросить каталог и уменьшить счетчик ссылок. Запросы к каталогу можно оптимизировать для получения более одного номера индексного дескриптора за раз, но во всех случаях для каждого удаляемого файла файловая система должна проверять индексный дескриптор на предмет количества ссылок и обновлять индексный дескриптор (или отмечать его для удаления).

Другими словами, эта операция O (n) для количества файлов для удаления, что в вашем случае очень велико.

Если вы не можете отформатировать свой раздел, что, я думаю, твой случай ;-), просто запустите задачу в фоновом режиме или на экране и наберитесь терпения.

Другое решение - сделать резервную копию файлов, которые вы хотите сохранить, отформатировать раздел и восстановить файлы. Может быть, это быстрее, чем удаление всех файлов, но требует больше времени ( find ... rm можно забыть в фоновом режиме на много дней, если необходимо ...).

0
ответ дан 3 December 2019 в 01:15

Теги

Похожие вопросы