Linux знаходить імена файлів із заданим рядком


107

Я перебуваю на Ubuntu, і я хотів би знайти всі файли в поточному каталозі та підкаталогах, ім'я яких містить рядок "John". Я знаю, що grepможе відповідати вмісту у файлах, але я не маю уявлення, як його використовувати з іменами файлів. Будь-яка допомога буде вдячна.


Відповіді:


195

Використовуйте команду find ,

find . -type f -name "*John*"

1
Створення користувальницького сценарію bash #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi дозволить вам просто запустити F search-stringяк ідеальний ярлик
Ілля Ростовцев

@IliaRostovtsev - приємно, але [ -z "$1" ]було б трохи краще.
Джо

@Joe Ага, правильно. Ви маєте на увазі, якщо на шляху є пробіли? Але тут ми лише перевіряємо наявність простору в $ 1, щоб 2 долари з’явилися, і все. Ти маєш на увазі, що теоретично краще, правда?
Ілля Ростовцев

@IliaRostovtsev - Власне, я помилився. Якщо $ 1 недійсне, тест стає if [ -z ]. Я думав, що це буде синтаксична помилка, але вона працює. З цього моменту я можу спростити деякий код.
Джо

25

Правильна відповідь вже надіслана, але для того, щоб ви дізналися, як допомогти собі, я подумав, що кину на щось корисне по-іншому; якщо ви можете підсумувати те, що ви намагаєтеся досягти одним словом, у Linux є особлива чудова допомога.

man -k <your search term>

Це означає, що в короткому описі перелічити всі команди, які містять пошуковий термін. Зазвичай є досить хороший шанс, що ти знайдеш те, що ти шукаєш. ;)

Цей результат іноді може бути дещо переважним, і я рекомендую звузити його до виконуваних файлів, а не всіх доступних довідкових сторінок, як-от так:

man -k find | egrep '\(1\)'

або, якщо ви також хочете шукати команди, які вимагають більш високих рівнів привілеїв, наприклад:

man -k find | egrep '\([18]\)'

3
Мені цікаво ... питання, яке не показує спроби вирішити проблему за допомогою пошуку, отримує підсумкове голосування, дружнє пояснення того, як дізнатися про можливі команди, натрапляє. Які критерії? :)
тинк

1
я підтримав тебе. урок мало хто може це зробити. але ми можемо побачити зразки та адаптуватись :)
tgkprog

2

findКоманди займуть багато часу , оскільки він сканує реальні файли в файлової системі.

Найшвидший спосіб - використання locateкоманди, яка дасть результат негайно:

locate "John"

Якщо команда не знайдена, вам потрібно спочатку встановити mlocateпакет і запустити updatedbкоманду, щоб підготувати базу даних пошуку вперше.

Детальніше тут: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

Це дуже просте рішення за допомогою treeкоманди в каталозі, який ви хочете шукати. -fпоказує повний шлях до файлу і |використовується для передачі виводу з дерева, grepщоб знайти файл, що містить рядок filenameу імені.

tree -f | grep filename
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.