Утилита 'find' не выводит все файлы при использовании подстановочных знаков

Бег:

$find . -name *.exe

дает:

./MakeItSo_1.2.2/MakeItSo_1.2.2/MakeItSo.exe
./MakeItSo.exe

но это не единственные исполняемые файлы в каталоге. Например, бег

$find . -name ATLTester.exe

дает:

./Debug/ATLDmoVexaTester.exe

1 ответ

Решение

Это из-за ракушек. Пытаться:

find . -name "*.exe"

Когда не указано, *.exe распространяется на все *.exe файлы в текущем каталоге, если их нет. Так получилось, что у вас есть только один такой файл, поэтому ваша оригинальная команда была на самом деле:

find . -name MakeItSo.exe

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

Другие вопросы по тегам