Удалить миллионы файлов в каталоге
На днях я запустил bleachbit в своей системе. Я включил функцию очистки дискового пространства в нем. Это заняло несколько часов, и мое дисковое пространство полностью заполнилось (около 100 ГБ). После ожидания навсегда я решил прекратить работу программы и удалить файлы вручную.
Теперь проблема: я не могу удалить файлы или каталог. Я не могу сделать Ls в каталоге. Я пробовал rsync -a --delete, wipe, rm, различные комбинации find & rm и т. Д.
Я следовал приведенным здесь инструкциям и заметил, что "Directory Index Full!" ошибка в моих журналах, а также. рм в каталоге с миллионами файлов
Я заметил, что команда stat вернула необычно большой каталог размером более ГБ. Обычно это всего 4096 или около десятков тысяч.
nameh@labs ~ % stat kGcdTIJ1H1
File: ‘kGcdTIJ1H1’
Size: 1065287680 Blocks: 2080744 IO Block: 4096 directory
Device: 24h/36d Inode: 9969665 Links: 2
Access: (0777/drwxrwxrwx) Uid: ( 1000/ nameh) Gid: ( 1000/ nameh)
Access: 2014-10-31 07:43:08.848104623 +0530
Modify: 2014-10-31 07:43:19.727719839 +0530
Change: 2014-10-31 07:43:19.727719839 +0530
Birth: -
Команда "ТОЛЬКО", которая до сих пор может удалять файлы в этом каталоге, - это команда srm (инструментарий безопасного удаления от THC). Все остальные команды не работают. srm работает уже 20 часов и освободил около 1,1 ГБ. Он работает в наименее безопасном режиме.
sudo srm -v -rfll kGcdTIJ1H1
Идеи?
редактировать: мой вопрос "как быстро удалить каталог?". Примерно через несколько часов без необходимости тратить несколько дней на удаление файлов. рм -рф ничего не делает.
3 ответа
Вы могли бы использовать этот трюк Perl:
perl -e 'chdir "/path/to/dir" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
то, что это делает, сначала идет в каталог, открывает его и удаляет (отменяет связь) все файлы в нем, не получая сначала список всех файлов (то есть, вероятно, rm задыхается).
Трюк не мой, а Рэндал Л. Шварц: http://blogs.perl.org/users/randal_l_schwartz/2011/03/perl-to-the-rescue-case-study-of-deleting-a-large-directory.html
У меня была похожая проблема, когда один из разделов был заполнен миллионами файлов и, следовательно, потреблял все доступные иноды, тогда, хотя в файловой системе было почти 20 ГБ свободного места, я не смог создать какой-либо файл для этого, потому что иноды были исчерпаны.
Итак, я запустил команду find, которая удалила файлы размером 1,4 миллиона. Это заняло довольно много времени, хотя, поскольку команды find и exec combo find передают каждый файл в exec functoin, который, в свою очередь, запускает команду rm для файла.
поиск в каталоге cd /to/. -type f -exec rm {} \;
ИЛИ ЖЕ
Вы можете попробовать Xargs
находить. -тип f |xargs rm
У меня обе команды работали
Надеюсь, поможет.
Вы можете попробовать следующее
находить. -type d -print -delete #drop the -print, чтобы не видеть, что вы удаляете, я считаю, что это самый лучший
находить. -type f -exec rm {} \; # медленнее, что выше
находить. -mtime +29 -принт | xargs ls -d