Удаляет ли «rm files*» все совпадения из всех подкаталогов?

Удаляет ли «rm files*» все совпадения из всех подкаталогов?

Я хочу удалить любой файл, который похож на , wordpress-891.sqlиз текущего каталога (не внутри подкаталогов).

Сработает ли rm wordpress-*.sqlэто или также удалит совпадения из подкаталогов?

решение1

Нет. Обычная подстановка *не является рекурсивной, как и rm.

Если имя каталога совпадает, он не будет удален — -rдля удаления каталога необходим флаг.

Так что это можно сделать безопасно, если вы уверены, что хотите удалить эти файлы.

Вы также можете сделать rmинтерактивным

rm -i wordpress-*.sql

затем он будет запрашивать подтверждение перед удалением каждого файла

решение2

Да, он делает это за вас и удаляет все файлы с этой схемой в текущем каталоге. И НЕТ, он не удаляет файлы в подкаталогах.

Если вы не уверены, что произойдет при запуске такой команды:

rm wordpress-*.sql

затем просто запустите его с помощью ls:

ls wordpress-*.sql

файлы, которые вы видите в выводе, — это те, которые будут удалены.

Когда вы пытаетесь получить список, например: foo*, лучше использовать -dswitch with , lsчтобы предотвратить вывод списка файлов в каталоге с именем foobar/и т. д.

ls -d foo*

Этот прием работает для команд, которые не используются для рекурсивного выполнения работы.

Другое, что вы можете сделать, это ввести желаемый ввод, например: wordpress-*затем нажать Ctrl+ Alt+ *, и теперь все совпадения будут автоматически введены перед вашей командой.

решение3

Нет, rmне рекурсивно проходит по подкаталогам.

ВидетьУдалить соответствующие файлы во всех подкаталогах - SuperUserдля методов удаления файлов в подкаталогах.

Если вы обеспокоены тем, что можете случайно удалить что-то важное, используйте gvfs-trash(что отправит файлы в корзину) вместо rm(что навсегда удалит файлы).

решение4

Если вы хотите найти и удалить все соответствующие файлы, например wordpress-*.sql, , вы можете использовать findкоманду. :)

Например, вы хотите удалить все соответствующие файлы с wordpress-*.sqlпомощью test_dir, выполните следующие действия.

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

Всякий раз, когда findпрограмма действительно находит соответствующий файл, она пытается выполнить команду, следующую за -execопцией. В этом случае rm -f {}будет выполнена и {}будет изменена на имя соответствующего файла. Например

rm -f wordpress-169.sql

Вы также можете задать глубину подкаталогов с помощью -maxdepthопции.

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

Обратите внимание, что вы должны указать -maxdepthопцию перед другими опциями. В противном случае вы можете получить результаты, которые вы на самом деле не хотите видеть.

Связанный контент