найти и отрицать состояние -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*' 
  • Как искать слово во всем содержимом каталога в linux
  • `find -path` объяснил
  • Linux Найти файл с отрицанием в скрипте Bash
  • Найдите файл хранилища ключей, содержащий конкретный SHA-1
  • Как я могу синхронизировать все PDF-файлы из одного каталога с Dropbox?
  • Найти каталоги и файлы с разрешениями, отличными от 775/664
  • Ошибка mv command "уже существующий файл"
  • Найти уникальные значения из поиска
  • IOStat сообщает о большой записи ocassional, но не находит никаких больших файлов
  • Только путь к файлу печати, без имени файла
  • Найти «.git» dirs, но игнорировать некоторые пути; или как работает `find -not`
  • Linux и Unix - лучшая ОС в мире.