Ответы:
Прямой эквивалент
find . -iname <filename>
в котором будут перечислены все файлы и каталоги, вызываемые <filename>
в текущем каталоге, и любые подкаталоги, без учета регистра.
Если ваша версия find не поддерживает -iname
, вы можете использовать -name
вместо этого. Обратите внимание, что в отличие от -iname
, -name
чувствителен к регистру.
Если вы хотите перечислить только файлы с именами <filename>
, а не каталоги, добавьте-type f
find . -iname <filename> -type f
Если вы хотите использовать подстановочные знаки, вы должны поставить вокруг них кавычки, например
find . -iname "*.txt" -type f
в противном случае оболочка расширит его.
Как уже отмечали другие, вы также можете сделать:
find . | grep "\.txt$"
grep
будет печатать строки на основе регулярных выражений, которые являются более мощными, чем подстановочные знаки, но имеют другой синтаксис.
Смотрите man find
и man grep
для более подробной информации.
<filename>
качестве маркера для userinput - плохая привычка в среде командной строки, где < and >
большую часть времени имеет конкретное значение. Я предлагаю просто использовать filename
, может быть, FILENAME, чтобы подчеркнуть это. Большинство людей поймут, и те, кто этого не сделает, могут причинить вред, если не поймут, что они не должны попадать в знак «меньше или больше».
<filename>
Это соглашение во многих документах UNIX, поэтому я думаю, что людям полезно знать об этом, но я согласен, что FILENAME
может быть легче понять.
find -iname <filename>
лучше, так как он нечувствителен к регистру, как DOS
Позволяют некоторые снаряды ls **/filename
, что довольно удобно.
shopt -s globstar; echo **/filename
эквивалентен find . -name "filename"
. Это также работает в Zsh.
shopt -s globstar
, это, вероятно, будет работать для вас. Рекурсивное сглаживание - это функция, которая доступна только в некоторых оболочках, а иногда она не включена по умолчанию.
shopt
команда включает эту опцию globstar on
. Теперь это работает как шарм. Большое спасибо.
Вы можете сделать это с
find . | egrep filename
find . -regextype posix-egrep -regex '.*filename.*'
(я не знаю, egrep
важна ли эта часть, но вы использовали egrep
в своем ответе, поэтому я включил ее)
grep
использует регулярные выражения, в то время как команда DOS использует подстановочные знаки оболочки.
find . -name "*.*"
не будет делать то, что вы ожидаете от фона DOS. Однако глобусы достаточно близки, чтобы их можно было узнать, а регулярные выражения - совершенно новое чудовище.
*.*.*
в современном DOS, то есть Windows CMD? Как насчет *.*.*.*
?
Это может быть также: tree -if </your/path>
или 'pwd'
как путь
<filename>
содержит символы подстановки, используйте кавычки, напримерfind . -name '*.txt'
.