На размещенном VM (в VirtualBox) рабочий сервер Ubuntu 11.10 64 бита также с помощью ext4 мы получили следующие результаты:
Sync Writes:
288 writes of size 4096 written in 10.034 seconds.
28.702412 writes/second.
0.112118796 megs/second.
На физическом сервере рабочий Redhat 5.7 были получены 64 бита, использующие ext3 следующие результаты:
Sync Writes:
54987 writes of size 4096 written in 10.001 seconds.
5498.1504 writes/second.
21.47715 megs/second.
Интересно, выполнял ли OP это в VM также или если существует проблема между ext3 и ext4. Я ценю, что могло быть различие между размещенными и неразмещенными средами, однако не ожидал такой большой разницы.
Преимущество для нахождения - то, что это рекурсивно. Некоторые современные оболочки предлагают поисковую рекурсию, но это не находится в стандарте POSIX, таким образом, Вы не можете полагаться на них для работы везде. Вот пример, который работает в ударе 4.0 и выше.
shopt -s globstar
for f in **/*.swp; do
rm -- "$f"
done
До команды находки, которую Вы уже имеете, это повредится на любых файлах, которые содержат пробел, такой как пробелы. Вот фиксированный пример:
find lib/ -name '*.swp' -exec rm {} +
С некоторыми версиями find
, можно использовать -delete
:
find lib/ -name '*.swp' -delete
cd lib && ls -R | grep '\.swp$' | xargs -d '\n' rm
Что касается Вашего оригинала, я сделал бы это:
find lib -name '*.swp' | xargs -d '\n' rm
потому что, если find
возвраты никакие результаты Вы не получите ошибку.
Вы могли бы также хотеть использовать \! -type d
так find
не возвращает каталогов, которые, оказывается, называют *.swp
, потому что rm
не удался бы удалить их. Вы могли сделать что-то похожее с моим альтернативным использованием ls -RF
потому что каталоги получили бы запаздывание /
так не соответствуют regex.
-exec rm {} \;
потому что это выполнится rm
одно время, а не однажды для каждого файла. Это преимущество не переносит на -exec rm {} +
. Последний почти всегда, что Вы хотите.
– jordanm
22.01.2013, 00:42
+
как разделитель вместо ;
кому: -exec
(POSIX, должен работать везде).
– jordanm
22.01.2013, 00:43
for
цикл выше был бы эквивалентенfind -L . -name '.*' ! -name . -prune -o -name '*.swp' -exec rm {} +
– Stéphane Chazelas 29.01.2013, 01:44