Найти команду: как игнорировать регистр?

Я ищу файл «WSFY321.c» в огромной иерархии каталогов.
Обычно я использовал GNU find : find . -name "WSFY321.c"
Но я не знаю этого случая, это может быть прописная, строчная или комбинация обоих.

Каков самый простой способ найти этот файл?
Есть что-то лучше, чем find . | grep -i "WSFY321.c"?

139 голосов | спросил Nicolas Raoul 20 FebruaryEurope/MoscowbMon, 20 Feb 2012 06:35:11 +0400000000amMon, 20 Feb 2012 06:35:11 +040012 2012, 06:35:11

3 ответа


180

В последних версиях GNU find есть флаг -iname, для поиска по регистро-независимым именам.

find . -iname "WSFY321.c"
ответил Lars Rohrbach 20 FebruaryEurope/MoscowbMon, 20 Feb 2012 07:01:30 +0400000000amMon, 20 Feb 2012 07:01:30 +040012 2012, 07:01:30
36

С GNU find или другими версиями find, которые имеют его:

find . -iname 'WSFY321.c'

В других версиях:

find . -name '[Ww][Ss][Ff][Yy]321.[Cc]'

Или компромисс, который медленнее, но легче набирать:

find . -name '????321.c' | grep -i '/WSFY[^/]*$'

Или в zsh:

print -rl -- **/(#i)WSFY321.c
ответил Gilles 20 FebruaryEurope/MoscowbMon, 20 Feb 2012 07:09:28 +0400000000amMon, 20 Feb 2012 07:09:28 +040012 2012, 07:09:28
1

Два решения для macOS:

Использование GNU find:

brew install findutils --with-default-names
# restart Terminal
find . -iname 'WSFY321.c'

Использование GNU sed:

brew install gnu-sed --default-names
# restart Terminal
find -name "$(sed 's|\([[:alpha:]]\)|[\U\1\L\1]|g' <<<'WSFY321.c')"
ответил Drew Beres 25 PMpTue, 25 Apr 2017 23:05:49 +030005Tuesday 2017, 23:05:49

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132