
Я использую команду «find», чтобы удалить некоторые бесполезные файлы указанных расширений из всех подпапок, расположенных в каталоге, из которого я выполняю команду.
find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete
можно ли объединить эти 4 команды в одну, чтобы удалить 4 типа filles с помощью 1 команды? Можно ли альтернативно использовать find, чтобы удалить ВСЕ filles, которые НЕ принадлежат расширениям *.dlg?
решение1
Не цитировать *.txt
— плохо. Смотретьfind
утилита не выводит все файлы при использовании подстановочных знаков.
можно ли объединить эти 4 команды в одну?
Да. Смотрите.Объединение нескольких find
команд в одну.
find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …
(Здесь используются 3 шаблона, поскольку ваша 4-я команда дублирует 1-ю, и нет смысла использовать один и тот же шаблон дважды.)
Можно ли использовать альтернативный вариант
find
для удаления ВСЕХ файлов, которые НЕ принадлежат расширениям*.dlg
?
Да (и я предполагаю, что вам нужны обычные файлы, а не всефайлы):
find . -type f ! -name '*.dlg' # -delete
Если приведенная выше команда выводит файлы, которые вы действительно хотите удалить, запустите ее с #
параметром removed.
Тест ! -name '*.dlg'
отрицается -name '*.dlg'
. Он успешен тогда и только тогда, когда -name '*.dlg'
он провалится.
Вы использовали -delete
в вопросе, так что ваш, find
по-видимому, поддерживает его. Пользователи с меньшими возможностями find
видятfind
: -exec rm {} \;
против -delete
- почему первый вариант широко рекомендуется?
Обратите внимание, в вашем случае bare find
работает как find .
. Я использовал find .
явно, потому что некоторые реализации find
требуют по крайней мере один путь в командной строке.