У меня есть следующая команда, которая перечисляет все файлы с расширением doc , docx и т.д.

find . -maxdepth 1 -iname \*.doc\*

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

  1. Example.docx
  2. Dummydata.doc
  3. Sample.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 ответ1

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 только вы будете уверены, что правильный файл будет удален. Но я боюсь, что будет проще просто вручную удалить файлы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .