найти и отрицать состояние -iname

Я пытаюсь найти все файлы, которые имеют «столп» в названии (стимул для случая) и не содержат «кеш» (также нечувствительный к регистру) с

find . -iname '*pillar*' -and -not -iname '*cache*' 

но он не работает, как я нахожу (среди прочих)

 ./Caches/Metadata/Safari/History/https:%2F%2Fwww.google.ch%2Fsearch?q=pillars+of+eternity+dropbox&client=safari&rls=en&biw=1440&bih=726&ei=CnBDVbhXxulSnLaBwAk&start=10&sa=N%23.webhistory 

Что я делаю не так?

2 Solutions collect form web for “найти и отрицать состояние -iname”

Похоже, вы хотите избежать поиска файлов в *cache* каталогах больше, чем поиск файлов с *pillar* а не *cache* в их имени. Тогда просто скажите, не нахожусь, чтобы не спускаться в *cache* :

 find . -iname '*cache*' -prune -o -iname '*pillar*' -print 

Или с zsh -o extendedglob :

 ls -ld -- (#i)(^*cache*/)#*pillar* 

(не является строго эквивалентным, поскольку это сообщит файл foo/pillar-cache )

Или (менее эффективен, поскольку он спускает все дерево, как в решении @ apaul ):

 ls -ld -- (#i)**/*pillar*~*cache* 

Подробности о специфических шагах zsh :

  • (#i) : включить нечувствительность к регистру
  • ^ : оператор отрицания glob
  • (...) : группировка (например, @(...) в ksh ).
  • <something># : ноль или более <something> (например, * в регулярных выражениях).
  • Оператор ~ : and-not (совпадения по всему пути)
  • **/ : 0 или более уровней каталогов (сокращение для (*/)# ).

Добавьте квалификатор (D) glob, если вы хотите спуститься в скрытые записи и сопоставить скрытые файлы, например, в решении find .

Параметры find , которые вы указали, применяются к имени файла, а не к имени подкаталогов.

Здесь ваше имя файла не содержит cache но содержит pillar , поэтому оно совпадает.

В вашем случае вы можете использовать опцию -path . Что-то вроде:

 find . -iname '*pillar*' -and -not -ipath '*cache*' 
  • Манипулировать имя файла с помощью команды find
  • Если имя папки равно «somestring», переместите все файлы в папке на один уровень вверх
  • Как найти + конвертировать на эти .gif?
  • Как использовать find, когда имя файла содержит пробелы?
  • Как использовать поиск для удаления файлов * .py ~ и * .pyc сразу?
  • Как найти старые каталоги в локальном каталоге, используя find в AIX?
  • Исключить пути, которые заставят find жаловаться на разрешения
  • Если имя файла имеет более n символов, удалите последние
  • Формат для iname в операции поиска
  • найти ошибку совпадения команд
  • find: ничего не делать, если файлы не указаны
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.