Как использовать несколько критериев для -find

У меня есть папка, где моя музыка без тегов - это место, где я хочу запустить скрипт для удаления всех .png и .jpg, кроме тех, которые начинаются со слова «cover». Вот что я попробовал:

find . -name '*.jpg' -or -name '*.png' -not - -name 'cover.*'
find . (-name '*.jpg' -or -name '*.png'\) -not - -name '*.png'

И другой вариант из двух, ни один не работал. (Я не включил -delete в конце специально)

6
задан 2 September 2019 в 13:20

2 ответа

Команда, которую Вы ищете:

find . -type f \( -name '*.jpg' -or -name '*.png' \) -not -name "cover.*"
  • Добавление type -f сделает find команда только ищет файлы.

  • В Вашей второй команде необходимо добавить пространство после \( и прежде \) (Вы также забыли \ прежде ().

  • Кроме того, Вам не нужен a - между -not и -name. Ваша первая команда хорошо работает при удалении ее, не производя вывод, который Вы хотите (см. комментарий JoL).

Можно читать больше о findсинтаксис и опции в странице справочника Ubuntu команды онлайн, или выполненный команда man find прочитать руководство в терминале. А именно, читайте OPERATORS раздел руководства, так как это - что, кажется, смущает Вас больше всего.

Примечание: Большинство терминальных команд предоставляет руководству надлежащий синтаксис команды и доступные варианты, которые можно считать, если Вы работаете man <command> в Вашем терминале.

8
ответ дан 23 November 2019 в 07:37

Я думаю, что Вам нужно -not оператор перед эти -or операторы:

find -not -name "cover*" -name "*.jpg" -or -name "*.png"

0
ответ дан 3 September 2019 в 08:40

Другие вопросы по тегам:

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