Назад | Перейти на главную страницу

удалить миллионы файлов в каталоге

На днях я запустил bleachbit в своей системе. Я включил в нем опцию очистки дискового пространства. Это заняло несколько часов, и мое дисковое пространство полностью заполнилось (около 100 ГБ). После бесконечного ожидания я решил завершить программу и удалить файлы вручную.

Теперь проблема: я не могу удалить файлы или каталог. Я не могу выполнить команду ls в каталоге. Я пробовал rsync -a --delete, wipe, rm, различные комбинации find & rm и т. Д.

Я выполнил приведенные здесь инструкции и заметил сообщение «Directory Index Full!» ошибка в моих журналах. rm в каталоге с миллионами файлов

Я заметил, что команда stat вернула необычно большой размер каталога, превышающий 1 ГБ. Обычно это всего 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: -

Команда "ONLY", которая пока что может удалять файлы в этом каталоге, - это команда srm (инструментарий безопасного удаления от THC). Все остальные команды не работают. srm работает уже 20 часов и на данный момент освободил около 1,1 ГБ. Он работает в наименее безопасном режиме.

sudo srm -v -rfll kGcdTIJ1H1

Идеи?

edit: Мой вопрос: «как мне быстро удалить каталог?». Примерно за несколько часов или около того, не тратя несколько дней на удаление файлов. rm -rf ничего не делает.

вы можете использовать этот трюк с 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

У меня была аналогичная проблема, когда один из разделов был заполнен миллионами файлов и, следовательно, потреблял все доступные inodes, тогда, хотя в файловой системе было почти 20 ГБ свободного места, я не смог создать на нем какой-либо файл, потому что inodes были исчерпаны.

Итак, я запустил команду find, которая удалила 1,4 миллиона файлов. Это заняло довольно много времени, хотя с помощью find и exec combo find будет передавать каждый файл функции exec, которая, в свою очередь, запускает команду rm для файла

cd / в / каталог найти. -type f -exec rm {} \;

ИЛИ

Вы можете попробовать xargs

найти . -тип f | xargs rm

Обе команды работали у меня

Надеюсь, поможет.

вы можете попробовать следующее

найти . -type d -print -delete # отбросьте -print, чтобы не видеть, что вы удаляете, я считаю, что это самый ужасный

найти . -type f -exec rm {} \; # медленнее, чем выше

найти . -mtime +29 -print | xargs ls -d