3

Я пытаюсь рекурсивно искать имя файла, оканчивающееся на .png Моя команда find отлично работает для * .js, но не для * .png.

~ >find dev -name *.png
~ >find dev -name bluerightarrow.png
dev/sandbox/ScheduleEditorTS/ScheduleEditorTS/img/bluerightarrow.png
~ >find dev -name *.js
dev/backup/ScheduleEditorTS/packages/jQuery.2.1.3/Content/Scripts/jquery-2.1.3-vsdoc.js
dev/backup/ScheduleEditorTS/packages/jQuery.2.1.3/Content/Scripts/jquery-2.1.3.js
... etc 

1 ответ1

3

У вас, вероятно, есть файл .png в вашем текущем каталоге, и * расширяется вашей оболочкой.

Вот практическое объяснение. Создайте каталог с именем test , затем другой каталог с именем sub и, наконец, файл с именем myfile.txt в sub . Затем cd в test . Вот команды для этого:

~ >mkdir -p test/sub
~ >touch test/sub/myfile.txt
~ >cd test

Вы можете запустить find и вы получите ожидаемые результаты:

~/test >find sub -name *.txt
sub/myfile.txt

Теперь создайте файл с именем cause.txt в test и снова запустите find :

~/test >touch cause.txt
~/test >find sub -name *.txt

На этот раз ничего не найдено, потому что shell расширяет * и ваша команда find становится:

~/test >find sub -name cause.txt

Там нет ни одного файла cause.txt в sub поэтому нет никаких результатов.

Чтобы избежать этой проблемы, вы должны экранировать звездочку обратной косой чертой:

~/test >find sub -name \*.txt
sub/myfile.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .