Відповіді:
Використовуйте знахідку для цього:
find . -name "foo*"
find
потребує початкової точки, а .
(крапка) вказує на поточний каталог.
find . foo*
, foo*
то розширили б, а потім перейшли до пошуку.
" "
дуже необхідно для рекурсивного пошуку.
find . -name "foo*" 2>/dev/null
Часто знайти зручніші труби в греп; це дає вам повну силу регулярних виразів для довільного зіставлення підстановок.
Наприклад, щоб знайти всі файли з нечутливою до регістру рядком "foo" у назві файлу:
~$ find . -print | grep -i foo
find
також мають -iname
, -regex
і -iregex
прапори для регістронезавісімого шаблону, регулярного виразу, і нечутливих до регістру зіставлення регулярних виразів, так пекуче до grep
непотрібно.
find
команду, яка підтримує ці параметри. Іноді grep
стає єдиним варіантом.
find
знайде всі файли, які відповідають шаблону:
find . -name "*foo"
Однак, якщо ви хочете малюнок:
tree -P "*foo"
Сподіваюся, це допомагає!
brew install tree
для користувачів Mac OSX без apt-get
встановленої
find -L . -name "foo*"
У кількох випадках мені знадобився параметр -L для обробки символічних посилань каталогів. За замовчуванням символічні посилання ігноруються. У цих випадках це було досить заплутано, оскільки я міняв би каталог в підкаталог і бачив файл, що відповідає шаблону, але знаходжу, що не повертає ім'я файлу. Використання -L вирішує цю проблему. Символічні параметри посилання для знаходження - -P -L -H
Якщо ваша оболонка підтримує новий параметр глобалізації (можна ввімкнути :)shopt -s globstar
, ви можете використовувати:
echo **/*foo*
щоб рекурсивно знаходити будь-які файли чи папки. Це підтримується Bash 4, zsh та подібними оболонками.
Особисто я визначив цю функцію оболонки:
f() { find . -name "*$1*"; }
Примітка. Наведений рядок можна вставити безпосередньо в оболонку або додати у ~/.bashrc
файл користувача.
Тоді я можу шукати будь-які файли, ввівши:
f some_name
Крім того, ви можете використовувати fd
утиліту з простим синтаксисом, наприклад fd pattern
.
shopt -s globstar
команди. Це підтримується в Bash, zsh та подібних оболонках.
bash-3.2$ shopt -s globstar
даєbash: shopt: globstar: invalid shell option name
fd
У випадку, якщо find
це занадто повільно, спробуйте fd
утиліту - просту і швидку альтернативу find
написаному в Rust.
Синтаксис:
fd PATTERN
Демонстрація:
Домашня сторінка: https://github.com/sharkdp/fd
asciicast2vector
його можна використовувати.
find <directory_path> -type f -name "<wildcard-match>"
У підстановці підстановок ви можете вказати рядок, який ви хочете відповідати, наприклад * .c (для всіх файлів c)
Ви можете використовувати:
# find . -type f -name 'text_for_search'
Якщо ви хочете використовувати REGX використання -iname
# find . -type f -iname 'text_for_search'
Типовим способом пошуку рекурсивного файлу, який доступний у більшості випадків, є
find . -name "filepattern"
Починається рекурсивне проходження імені файлу або шаблону з поточного каталогу, де ви розміщені. За допомогою команди find ви можете використовувати символи та різні перемикачі, щоб побачити повний список опцій, введіть
man find
або якщо підручні сторінки недоступні у вашій системі
find --help
Однак є більш сучасні та швидші інструменти, а потім знайдіть, які проходять всю вашу файлову систему та індексують ваші файли. Одним із таких поширених інструментів є пошук або розміщення / переміщення, ви повинні перевірити керівництво вашої ОС щодо її встановлення та як тільки це Встановлено, що потрібно ініціювати базу даних, якщо сценарій установки не зробить це за вас, це можна зробити вручну, ввівши
sudo updatedb
І використовувати його для пошуку певного типу файлів
locate filename
Або, щоб шукати ім’я файлу чи малюнок у поточному каталозі, можна ввести:
pwd | xargs -n 1 -I {} locate "filepattern"
Він перегляне свою базу даних файлів і швидко роздрукує імена шляхів, що відповідають шаблону, який ви ввели. Щоб переглянути повний список параметрів пошуку, введіть:
locate --help
абоman locate
Крім того, ви можете налаштувати locate для оновлення своєї бази даних у заплановані часи через роботу cron, тому зразок cron, який оновлює db в 1:00, виглядатиме так:
0 1 * * * updatedb
Ці завдання в Cron повинні бути налаштовані під root, оскільки updateb потребує привілею root для переходу всієї файлової системи.
Я здивований, побачивши, що locate не використовується сильно, коли ми маємо пройти рекурсивно.
Я спершу знайду "$ PWD", щоб отримати список файлів у поточній папці, що цікавить, а потім запустити файли на них, як мені заманеться.
locate "$PWD" | grep -P <pattern>
Звичайно, це за умови, що оновлюєтьсяb робиться, а індекс періодично оновлюється. Це набагато швидший спосіб знайти файли, ніж запустити знахідку і попросити її спуститися по дереву. Згадуючи це для повноти. Нічого проти використання пошуку, якщо дерево не дуже важке.
locate "$PWD*.mp4"
Просто нагадую, що ви можете пропустити grep
Знизу команда допомагає шукати будь-які файли
1) Незалежно від випадку
2) Результат Виключення папок без дозволу
3) Пошук у корені чи з потрібного вам шляху. Змінити / з кращим шляхом.
Синтаксис:
find -iname '' 2> & 1 | grep -v " Приклад відхилено"
знайти / -iname 'C * .xml' 2> & 1 | grep -v "У дозволі відмовлено"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
find / -iname '*C*.xml' 2>/dev/null
Якщо ви хочете шукати спеціальний файл з підстановкою, ви можете використовувати наступний код:
find . -type f -name "*.conf"
Припустимо, ви хочете шукати тут усі файли .conf:
.
означає пошук, розпочатий звідси (поточне місце)
-type
означає тип елемента пошуку, який тут є файлом (f).
-name
означає, що ви хочете шукати файли з іменами * .conf .
Використовуйте
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Пояснення
find
відбувається рекурсія.-o
Чи означає -or
. Отже, вище означає пошук цієї підстановки АБО цього. Якщо у вас є лише один зразок, тоді не потрібно -o
.