Команда Find: как игнорировать регистр?

Это - распространенная проблема для, в спящем режиме и приостанавливают в Ubuntu / Debian.

установка uswsusp

sudo apt-get install uswsusp

затем попробуйте следующее за, приостанавливают и в спящем режиме соответственно,

sudo s2ram

sudo s2disk

если это работает, то можно сделать это постоянным, создать резервную копию следующего,

sudo cp /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux /usr/lib/hal/scripts/linux/hal-system-power-suspend-linux.bak

sudo cp /usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux /usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux.bak

и отредактируйте следующее,

/usr/lib/hal/scripts/linux/hal-system-power-suspend-linux

#!/bin/sh
/sbin/s2ram –force

/usr/lib/hal/scripts/linux/hal-system-power-hibernate-linux

#!/bin/sh
/sbin/s2disk
178
20.02.2012, 04:35
3 ответа

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

find . -iname "WSFY321.c"
227
27.01.2020, 19:27
  • 1
    Кроме того, так как Вы конкретно ищете файл, можно, вероятно, побрить еще несколько галочек от этого с -type f отметьте, таким образом, это не потрудится смотреть на имя, если inode будет каталогом. Но это - педантичные уровни оптимизации... –  Shadur 20.02.2012, 11:47
  • 2
    Для работы с некоторым regex можно сделать find . -iname \*WSFY321.c\* -type f –  Benj 12.06.2016, 01:01

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

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
41
27.01.2020, 19:27
  • 1
    @Gilles grep версия фильтрует только верхний регистр, и я не понимаю' [^/]'.. (не/) –  Peter.O 20.02.2012, 08:22
  • 2
    @Gilles, Что аргумент должен использовать одинарные кавычки в первом случае (точное имя файла) ни по каким кавычкам вообще? –  Bernhard 20.02.2012, 09:14
  • 3
    @Peter. O Нет * после / в версии удара. Я имел в виду grep -i. Я использую [^/]* вместо .* чтобы не поймать файлы в каталогах, имя которых начинается WSFY. непротиворечивость –  Gilles 'SO- stop being evil' 20.02.2012, 12:08
  • 4
    @Bernhard. –  Gilles 'SO- stop being evil' 20.02.2012, 12:08
  • 5
    Спасибо Gilles: Я удалил предыдущий комментарий с неправильным синтаксисом и протестировал исправленную версию, но это не работает без * (по неожиданной причине; мне, по крайней мере).   нечувствительная к регистру опция больше не работает: shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c ... Я предполагаю вот почему, что это называют nocase ‍​ шариком: это только работает в контексте шарика (или таким образом, это кажется). –  Peter.O 20.02.2012, 13:34

Два решения для 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')"
3
27.01.2020, 19:27

Теги

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