У меня есть следующая команда, которая выводит список всех файлов с расширением doc
, docx
и т.д.
find . -maxdepth 1 -iname \*.doc\*
Команда возвращает множество файлов, некоторые из которых я хотел бы удалить. Например, возвращаемые результаты:
- Пример.docx
- Dummydata.doc
- Образец.doc
Я хотел бы удалить Sample.doc и Dummydata.docx. Как удалить файлы с помощью опции -exec
. Могу ли я передать имена файлов, например, rm Dummydata.docx Sample.doc
поэтому команда будет выглядеть следующим образом
find . -maxdepth 1 -iname \*.doc\* -exec rm Dummydata.docx Sample.doc
Могу ли я передать имена файлов в {} after
rm`? Например
find . -maxdepth 1 -iname \*.doc\* -exec rm {Dummydata.docx} Sample.doc
Есть ли лучший способ сделать это?
решение1
Если вы заранее знаете имена файлов, будет проще просто удалить их сразу:
find . -iname "Dummydata.doc" -delete
Или, при наличии нескольких условий:
find . \( -iname "Dummydata.doc" -o -iname "Sample.doc" \)
Скобки задают предпочтения, но их необходимо экранировать или заключать в кавычки, поскольку обычно скобки имеют особое значение для вашей оболочки.
В противном случае, если вы хотите сначала просмотреть список результатов, вы можете передать путь к найденным файлам – здесь, вставить в {}
– в sh
. Для sh
команды путь станет $0
, и вы можете сравнить его с именем файла, который вы хотите удалить:
find . -maxdepth 1 -iname "*.doc" \
-exec sh -c 'if [ "$0" == "Dummydata.doc" ] || [ "$0" == "Sample.doc" ]; then echo rm "$0"; fi' {} \;
Здесь удалите, echo
как только вы будете уверены, что будет удален нужный файл. Но я боюсь, что будет проще просто вручную удалить файлы.