2012-04-01 2 views
2

У меня 8 миллионов файлов в моем/tmp, и мне нужно их удалить. На этом сервере также работает довольно важное приложение, и я не могу его перегрузить."rm" (удалить) 8 миллионов файлов в каталоге?

$ ls | grep .| xargs rm 

Вышеприведенное делает мое приложение невосприимчивым.

У вас есть идеи по удалению этих файлов? Заранее спасибо!

+1

принадлежит к linux/unix. –

+2

запустите его с помощью ионита -c 3 – strkol

+2

nice -n20 rm -rf/tmp/* –

ответ

-1

попробовать это:

ls -1 | grep -v -e "ignoreFile" -e "ignoreFile2" | xargs rm -rf 

ls -1 упрощает ls | grep.

grep -v удалит строки из списка. просто дать ему какие-либо файлы, которые не должны быть удалены, отделяя модели с флагом -e

И только для полного объяснений: (я предполагаю, что это уже известно) гт -rf:

-r recursive 
-f force 
+0

'-1' в' ls -1 | grep' бесполезен. Это строго эквивалентно 'ls | grep' – jlliagre

2

grep . соответствует всем, включая ничего.

Вырезать его из цепочки, чтобы удалить процесс, запускаемый для каждого файла. Это должно ускорить процесс.

ls | xargs rm -rf 

Обратите внимание, что это будет душить на пробельных, так что улучшение

ls | xargs -I{} rm -v {} 

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

rm -rf dir 
mkdir dir 

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

+1

Обратите внимание, что очень понравился флаг '-1' не нужен, если' ls' обнаруживает, что его выход идет в канал; ls добавит это поведение для вас. –

2

Ну да, не используйте ls (потому что он может сортировать файлы, а список файлов может набирать больше памяти, чем вам хотелось бы), не добавляйте бессмысленные ссылки, такие как труба или xargs.

find . -type f -delete 
+0

Вы, как правило, правы, но 'ls' является встроенным во многие оболочки. Опция '-delete' предназначена только для поиска GNU, и она обычно псевдонимом' -exec/bin/rm -f '{}' ', поэтому неясно, быстрее ли ваша команда. Он короче для ввода, но это не обязательно запрашиваемая метрика производительности. –

+0

Он не встроен в bash, csh, dash, ksh или zsh. Он встроен в command.com/cmd.exe под названием «dir»; он также встроен в створку, но он называется «-ls». По сути, это встроенный, по большей части неверный. –

+1

Что касается GNU find, то -delete использует unlinkat (по крайней мере, на Linux), не пройдя лишнее обруч fork + execing rm. –

Смежные вопросы