Рубрики
Uncategorized

Нахождение файлов в командной строке

Узнайте, как использовать Find и Grep, чтобы найти файлы по имени и контенту.

Автор оригинала: 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»