Автор оригинала: James Haver.
Когда я впервые начал программирование, я использовал программу GUI для поиска файлов. Я думал, что это отличный инструмент. Он даже поддерживал регулярные выражения, но однажды он начал разбиться, и я больше не мог больше зависеть. Затем я начал использовать комбинацию инструментов командной строки UNIX, и они стали моим первым выбором для поиска файлов. Поиск непосредственно в IDES и Emacs все еще полезен.
Мы посмотрим, как использовать Найти и Греп найти файлы.
Найти файлы по имени
Откройте программу вашей командной строки и перейдите в каталог с не слишком много файлов. Запустите следующую команду.
find .
Это рекурсивно распечатает все файлы (каталоги, скрытые файлы, файлы, символические ссылки и т. Д.) В текущем каталоге и подкаталогах. Они будет показан как относительные пути. Найти Без аргументов не сделает то же самое вещь.
Мы можем изменить его, чтобы вернуть содержимое текущего каталога с абсолютным путем.
find "$(pwd)"
"$ ()" означает запустить команду bash внутри и вернуть ее как строку. PWD Возвращает настоящий рабочий каталог. Это распечатает все файлы IT Находит с абсолютным путем.
Теперь давайте найдем только файлы, которые имеют .js расширение.
find . -iname "*.js"
Имейте Фильтры файлы при предоставленном строковом аргументе и нечувствительности к регистру. Конфиденциальная версия для случаев — -имя . * это дикая карта. Потребляет 0 или более символы, затем соответствует строками, которые заканчиваются .js . Это очень распространено Узор в найти .
Что если мы хотим найти файл, который начинается с Я и заканчивается .js и может иметь другие персонажи между между ними.
find . -iname "i*.js"
Наконец, мы также можем искать слова в середине имени файла.
find . -iname "*index*"
Это не ограничивает файл на любое конкретное расширение. Что бы Запрос выглядит так, будто мы хотим найти что-то, что имеет показатель Где-то на имя и заканчивается расширением .js . Также попробуйте найти файлы, которые заканчиваются в другом Расширение в вашем каталоге.
Найти файлы по контенту
Греп Поискает простой текст с регулярными выражениями. Он выполняет глобальный поиск и печатает все линии, которые совпадают. Это отличный инструмент для поиска содержимого одного или нескольких файлов. Мы можем выполнить простой поиск по файлу со следующими шаблон Greep "Regexp"/file/path Отказ Вот пример.
grep "Hello" main.js
Это возвращает любые строки из main.js Это имеет слово Привет точно.
Мы можем сделать его контекстным нечувствительным, добавив -i .
grep -i "Hello" main.js
Если мы хотим, чтобы он распечатал номер строки, добавьте -n флаг.
grep -n "Hello" main.js
Мы можем найти каталог рекурсивно, добавив -R флаг. Это будет печатать из имени файла, где он был найден. Добавьте -n Флаг, если вы хотите номер строчки.
grep -r "div" src/
Мы можем даже ограничить файлы, которые мы ищем по расширению.
grep -r --include=*.js "div" src
И мы можем ограничить несколько расширений файлов.
grep -r --include=*.{css,html,js} "div" src
Сочетание находки и GREP
Есть несколько перекрытий в поисках файлов по имени Найти и репутация Но я нравится использовать Найти Чтобы отфильтровать имена файлов, то Греп Чтобы отфильтровать Содержимое файла с трубой |. оператор. Это хороший способ отделить беспокойство Хотя это может быть не нужно.
Первый пример, найдите все файлы JavaScript, которые имеют «Hello» в них.
find . -iname "*.js" | xargs grep -i "hello"
Что такое Ксаргс ? Это помогает Греп Оцените строки пути к файлу в фактическое Файлы и выполнить Греп на каждом файле. В противном случае, если вы не добавите Ксаргс , Греп выполнит свои запросы только на именах файлов.
Больше команд находки
Найти можно исключить скрытые файлы.
find . -not -path "*/\.*"
Найти Также можно включить несколько поисковых запросов. Тем не менее, это немного больше многолетнее, чем --include = *. {html, js} от репутация . -O используется для подключения запросы.
find . -name "*.html" -o -name "*.js"
Найти Можно исключить каталоги из вашего поиска. К сожалению, этот вариант Очень устно, для каждого варианта вы должны добавить -Path »./exclude/path" -прун , а затем подключить его с -O и убедитесь, что запрос заканчивается в -Притация Отказ
Поиск текущего каталога, исключая ./node_modules. .
find . -path "./node_modules" -prune -o -print
Поиск текущего каталога, исключая ./node_modules. и ./LIB Отказ
find . -path "./node_modules" -prune -o -path "./lib" -prune -o -print
Есть более простой способ запоминания, объединяя его с Греп , но это имеет хуже представления, потому что Найти Все еще ищите все файлы, затем Греп Удаляет его.
find . -name "*.js" | grep -v "node_modules"
Наконец мы можем комбинировать пару того, что мы узнали здесь. Исключить node_modules и искать файлы, которые имеют .html или .js расширение.
find . -name "*.html" -o -name "*.js" -path "./node_modules" -prune -o -print
Учить больше
Я предлагаю вам попробовать некоторые запросы самостоятельно и записывать их. Чем больше вы практикуете, тем легче будет вспомнить синтаксис, но если вы забудете, вы можете взглянуть на то, что у вас ранее.
Реверс-I-поиск (Ctrl-R) — отличный способ постепенно создавать поиск, сделав небольшой поиск, запустив его, затем снова получить его из командной строки и рафинированию ее.
Если есть некоторые поисковые запросы, которые вы используете несколько раз, вы можете создать Bash Alias экономить время.
Найти и Греп легко начать, но есть много вариантов. К Узнайте больше проверить их Человек Страницы, Stackoverflow или Учебники цифрового океана Отказ
Другие инструменты
Вот некоторые другие поисковые инструменты, которые стоит смотреть.
Оригинал: «https://www.codementor.io/@mchaver/finding-files-on-the-command-line-zy833t7x9»