Что такое эквивалент комнаты, 'находят, что lib / - называет *.swp' без находки?

На размещенном 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. Я ценю, что могло быть различие между размещенными и неразмещенными средами, однако не ожидал такой большой разницы.

2
10.02.2019, 21:04
2 ответа

Преимущество для нахождения - то, что это рекурсивно. Некоторые современные оболочки предлагают поисковую рекурсию, но это не находится в стандарте 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
4
27.01.2020, 21:57
  • 1
    Отметьте это это for цикл выше был бы эквивалентен find -L . -name '.*' ! -name . -prune -o -name '*.swp' -exec rm {} + –  Stéphane Chazelas 29.01.2013, 01:44
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.

1
27.01.2020, 21:57
  • 1
    Оба примера повреждаются на файлах с пробелами. –  jordanm 22.01.2013, 00:34
  • 2
    Передача по каналу к xargs предоставляют преимущество по - удаляют или даже - исполнительная комната {}? –  user17591 22.01.2013, 00:41
  • 3
    зафиксировал путем установки новой строки как разделителя –  Jonathan Wakely 22.01.2013, 00:41
  • 4
    @user17591 - это обладает преимуществами -exec rm {} \; потому что это выполнится rm одно время, а не однажды для каждого файла. Это преимущество не переносит на -exec rm {} +. Последний почти всегда, что Вы хотите. –  jordanm 22.01.2013, 00:42
  • 5
    Так будет использование + как разделитель вместо ; кому: -exec (POSIX, должен работать везде). –  jordanm 22.01.2013, 00:43

Теги

Похожие вопросы