У меня есть каталог на 30 ТБ, содержащий миллиарды файлов, которые формально являются файлами JPEG. Я удаляю каждую папку файлов следующим образом:
sudo rm -rf bolands-mills-mhcptz
Эта команда просто запускается и ничего не показывает, работает она или нет.
Я хочу видеть, как это удаление файлов или каков текущий статус команды.
rm
progress-information
Джунаид Фарук
источник
источник
rm -ri
. Это будет весело!Ответы:
Вы можете использовать,
rm -v
чтобыrm
распечатать по одной строке на файл. Таким образом, вы можете увидеть, чтоrm
действительно работает для удаления файлов. Но если у вас есть миллиарды файлов, все, что вы увидите, это то, чтоrm
все еще работает. Вы не будете знать, сколько файлов уже удалено и сколько осталось.Инструмент
pv
может помочь вам с оценкой прогресса.http://www.ivarch.com/programs/pv.shtml
Вот как вы бы вызвать
rm
сpv
с выходом , например ,В этом надуманном примере я сказал,
pv
что есть1000
файлы. Выходные данныеpv
показывают, что 562 уже удалены, истекшее время составляет 7 секунд, и оценка для завершения составляет 5 секунд.Некоторое объяснение:
pv -l
заставляетpv
считать по новым строкам вместо байтовpv -s number
говорит,pv
что такое общее количество, чтобы оно могло дать вам оценку.logfile
в конце предназначена для чистого вывода. В противном случае строка состояния изpv
смешивается с выходом изrm -v
. Бонус: у вас будет лог-файл того, что было удалено. Но будьте осторожны, файл станет огромным. Вы также можете перенаправить,/dev/null
если вам не нужен журнал.Чтобы получить количество файлов, вы можете использовать эту команду:
Это также может занять много времени, если есть миллиарды файлов. Вы также можете использовать
pv
здесь, чтобы увидеть, сколько он насчиталЗдесь говорится, что для подсчета 278 тыс. Файлов понадобилось 4 секунды. Точное число в конце (
278044
) является выходным значениемwc -l
.Если вы не хотите ждать подсчета, вы можете угадать количество файлов или использовать
pv
без оценки:Таким образом, у вас не будет оценки, чтобы закончить, но, по крайней мере, вы увидите, сколько файлов уже удалено. Перенаправьте,
/dev/null
если вам не нужен файл журнала.придираться:
sudo
?rm -r
достаточно рекурсивного удаления. нет необходимостиrm -f
.источник
pv
, при условии, что подсчет миллиардов файлов не слишком дорог ;-). (Это может занять почти столько же времени, сколькоrm
должно быть измерено!)pv
что индикатор прогресса обновляется только один раз в секунду, несмотря на его вклад. Таким образом, терминал должен отображать только одну строку вместо тонны каждую секунду.pv
нужно только увеличивать счетчик для каждой новой строки, с которой он сталкивается; это должно быть быстрее, чем выполнять перенос строк и вообще не отображать строку в терминале. Думаю бегать сpv
таким способом приводит к тому, что удаление файлов происходит быстрее, чем простоrm -rv
.rm -rv dirname | pv -l -s $(find dirname | wc -l) > logfile
Посмотрите ответ Лесманы , он намного лучше моего - особенно последний
pv
пример, который займет гораздо больше времени, чем первоначальное молчание,rm
если вы укажете/dev/null
вместоlogfile
.Предполагая, что вы
rm
поддерживаете опцию (возможно, так как вы работаете в Linux), вы можете запустить ее в подробном режиме с помощью-v
:Как было отмечено рядом комментаторов, это может быть очень медленным из-за количества вывода, генерируемого и отображаемого терминалом. Вместо этого вы можете перенаправить вывод в файл:
и смотреть размер
rm-trace.txt
.источник
Другой вариант - наблюдать за уменьшением количества файлов в файловой системе. В другом терминале запустите:
Количество используемых инодов будет уменьшаться по мере
rm
продвижения. (Если файлы в основном не имеют нескольких ссылок, например, если дерево было создано с помощьюcp -al
). Это отслеживает процесс удаления с точки зрения количества файлов (и каталогов).df
без-i
будет отслеживать с точки зрения используемого пространства.Вы также можете запустить
iostat -x 4
чтобы увидеть количество операций ввода-вывода в секунду (а также килобайт / с, но это не очень важно для ввода-вывода с чистыми метаданными).Если вам интересно узнать, над какими файлами
rm
в данный момент ведется работа, вы можете присоединитьstrace
к нему и посмотреть, какunlink()
системные вызовы (и getdents) извергают ваш терминал. напримерsudo strace -p $(pidof rm)
. Вы можете^c
отстегнуть ремень,rm
не прерывая его.Я забываю, если
rm -r
каталог меняется на дерево, которое он удаляет; если так, вы могли бы посмотреть/proc/<PID>/cwd
. Его/proc/<PID>/fd
мощь часто каталог Fd открытой, так что вы могли бы смотреть на это , чтобы увидеть , что вашrm
процесс в настоящее время рассматривает.источник
df -ih
действительно хороший дешевый способ наблюдать заrm
прогрессом./boot
системном разделе EFI.Хотя все приведенные выше ответы используют
rm
, наrm
самом деле удаление большого количества файлов может быть довольно медленным, как я недавно заметил, когда извлечение ~ 100K файлов из архива .tar на самом деле занимало меньше времени, чем их удаление. Хотя это на самом деле не отвечает на вопрос, который вы задали, лучшим решением вашей проблемы может быть использование другого метода удаления ваших файлов, например, одного из ответов на этот вопрос .Мой личный любимый метод - использовать
rsync -a --delete
. Я считаю, что этот метод работает достаточно быстро, поэтому его стоит использовать по сравнению с наиболее часто задаваемым ответом на этот вопрос , в котором автор написал C-программу, которую вам нужно будет скомпилировать. (Обратите внимание, что это будет выводить каждый файл, обрабатываемый на стандартный вывод, очень похоже наrm -rv
; это может замедлить процесс на удивительную величину. Если вы не хотите этот вывод, используйтеrsync -aq --delete
или перенаправьте вывод в файл.)Автор этого ответа говорит:
Я обнаружил, что этого достаточно для моих целей. Также потенциально важно из этого ответа, по крайней мере, если вы используете ext4:
источник
rm
и / илиfind --delete
был бы эффективным. Интересный момент об удалении в порядке сортировки, чтобы избежать перебалансировки b-дерева при удалении. Не уверен, насколько это относится к другим файловым системам. XFS также не очень хороша с миллионами файлов в каталоге. ИДК о BTRFS, но у меня сложилось впечатление, что это может быть полезно для такого рода вещей.Одна вещь, которую вы могли бы сделать, это запустить
rm
процесс в фоновом режиме (без вывода, чтобы он не замедлялся), а затем отслеживать его на переднем плане с помощью простой команды (a) :find/wc
Комбо может быть заменен любым инструментом , способным дать вам единицы , которые вы хотите.(а) Ну, относительно просто, по сравнению, скажем, с ядерной физикой, гипотезой Римана или с тем, что купить жене на Рождество :-)
источник
Некоторое время назад я написал что-то, чтобы напечатать скорость печати строк. Вы можете запустить,
rm -rfv | ./counter
и он будет печатать строки в секунду / мин. Хотя это и не прямой прогресс, он даст вам некоторую обратную связь о темпах прогресса, может быть,rm
забрел в сетевую файловую систему или что-то подобное?Ссылка на код здесь:
http://www.usenix.org.uk/code/counter-0.01.tar.gz
источник