Відповіді:
Прямий еквівалент є
find . -iname <filename>
в якому будуть перераховані всі названі файли та каталоги <filename>
у поточному каталозі, та будь-які підкаталоги, ігноруючи регістр.
Якщо ваша версія пошуку не підтримує -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>
в якості маркера для введення користувача - це погана звичка в середовищі командного рядка, де < 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. Глобуси досить близькі, щоб їх можна було впізнати, хоча регулярні виразки є абсолютно новим звіром.
*.*.*
робити в сучасних дос, тобто windows cmd? Про що *.*.*.*
?
Це може бути також: tree -if </your/path>
або 'pwd'
як шлях
<filename>
містять підстановку, використовуйте цитати навколо неї, наприкладfind . -name '*.txt'
.