Запретить расширение подстановочных знаков при поиске

Есть ли способ предотвратить расширение подстановочного знака в команде find так, что будет работать следующее:

 find . -iname "foo [bar]" 

Как указано здесь , я попытался запустить set -f , set -o noglob и setopt noglob непосредственно перед find но это не сработало.

Это сценарий bash и я использую Ubuntu 10.04.

Я знаю, что я мог бы просто избежать подстановочных знаков, но я боюсь, что могу оставить его.

3 Solutions collect form web for “Запретить расширение подстановочных знаков при поиске”

Как уже говорилось в @njsg, проблема вызвана find , а не оболочкой: двойные кавычки, которые вы используете, уже защищают ваше выражение от оболочки; он передается, чтобы find немодифицированный.

Проблема заключается в том, что find обрабатывает аргумент -name и -iname как шаблон. Единственный способ подавить это – использовать параметр find , который не рассматривает его аргумент как шаблон. Но find не имеет такой вещи, согласно моей странице руководства, так что вы не можете сделать. Лучшее, что вы можете сделать, это увеличить ваш скрипт, чтобы автоматически избежать скобок, прежде чем передавать их, чтобы find . Следующая sed замена sed сделает это для вас:

 echo "foo [bar]" | sed 's/[][]/\\&/g' 

Будет напечатан: foo \[bar\]

Проблема не в оболочке, а в поиске. Аргументом для -name и -iname является сам шаблон . [bar] будет означать b , a или r для find . Попробуйте просто выйти из квадратных скобок, то есть:

 find . -iname "foo \[bar\]" 

(Edit: При этом вы не избегаете их на уровне оболочки, а передаете обратную косую черту, чтобы find .)

Вы можете использовать одинарные кавычки для предотвращения расширения.

 find . -iname 'foo [bar]' 
  • Как очистить расширения файлов?
  • Ограничить доступ ssh для каждого пользователя на основе условий
  • Как распечатать последнее время входа?
  • Запустить команду при запуске для одного пользователя
  • Скрипт не работает, но команда работает вне сценария
  • Как извлечь и объединить значения переменных в другую переменную?
  • Какие оболочки (если они есть) не позволяют сразу считывать heredocs в памяти?
  • Баш ограничен оболочкой с использованием rbash
  • Что означает «rm hashed»?
  • Как изменить пользователя с аутентификацией внутри сценария оболочки
  • У меня есть 10 файлов в папке Unix с расширением .txt, здесь мне нужно получить все файлы отдельно от файла fgh.txt (любой), что такое команда UNIX?
  • Interesting Posts

    Пакеты, не перемещающиеся через linux ethernet bridge

    Могу ли я сделать окно alt-tab всегда отображаться на основном экране в Gnome?

    Xterm: для оболочки не найдено абсолютного пути: 500

    Как я могу перенаправить соответствующие строки в файл, а не совпадающие строки с другим файлом?

    Windows 10 и Archlinux Dualboot с зашифрованного диска

    Установка DISPLAY в системном файле systemd

    Изменение сочетания клавиш префикса tmux для быстрого сочетания клавиш

    почему я вижу ошибку «stdin: is not tty» при использовании x2go для удаленного подключения к нескольким дистрибутивам Linux Linux?

    Установка зависимостей Octave на CentOS 6 с использованием yum

    Использование AWK добавляет новую строку, если существует совпадение

    Файлы инициализации Shell

    Хранение списка в переменной

    Сделать GAIM (Pidgin) ждать дольше, прежде чем запускать новый файл журнала для свободного чата?

    найти . -размер -1GB в Centos

    Изменить время создания файлов (RPM) со времени загрузки на время сборки

    Linux и Unix - лучшая ОС в мире.