Вопрос по команде "найти" - PullRequest
3 голосов
/ 14 марта 2009
find . \( -name "_*" -or -newer while2 \) -type f -print

В приведенной выше команде linux почему _ * следует заключать в кавычки?

Ответы [ 3 ]

9 голосов
/ 14 марта 2009

Во-первых, оболочка расширяет все символы без кавычек * для соответствия именам файлов в локальном каталоге.

После этого оболочка запускает команду find с этим списком имен файлов.

Как правило, вы не хотите, чтобы оболочка выполняла '*' глобализацию в локальном каталоге. Обычно вы запускаете команду find для сопоставления имен файлов в других каталогах.

В оболочке есть несколько других вещей, которые она делает перед выполнением команды. $ VARIABLE замена - одна из них.

5 голосов
/ 14 марта 2009

Почему _ * следует заключать в кавычки?

Если это не так, ваша оболочка может расширить *, чтобы заменить ее файлами в текущем каталоге. Это, вероятно, не то, что вы хотели здесь.

2 голосов
/ 14 марта 2009

если вы не заключите его в кавычки, оболочка (bash?) Попытается развернуться. если в текущем каталоге есть файл, начинающийся с '_', вы получите что-то вроде:

find . \(-name _somefile _someother _file3 .... -or -newer while2 \) -type f -print

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...