Шукайте всі файли з розширенням .sql у папках та підпапках


17

Я хочу шукати всі файли з розширенням .sql у папках та підпапках (рекурсивні).

Як я можу це зробити?

Відповіді:


29

Або ...

find $directory_name -name \*.sql

Наприклад

find / -name \*.sql

Або

find ~ \*.sql

(де ~ дорівнює / home / your_username /), або ...

find /usr/local/share/ \*.sql

і так далі.


2

Виконайте це в командному рядку:

cd / && find | grep '\.sql$'

Змініть '/' в каталог, який ви хочете шукати.

The findКоманда може виконати завдання без Grep ( з допомогою додаткових опцій), але я вважаю вище використання більш зручним.

Для цього, наведена вище команда:

  1. Змінює поточний каталог до кореневого каталогу (cd / )
  2. Перераховує всі файли та каталоги в поточному каталозі та нижче (find )
  3. Фільтрує файли та каталоги на все, що закінчується на '.sql' ( | grep '\.sql$')

спасибі, чи можете ви це пояснити? ви використовуєте grep і передаючи свій вихід, щоб знайти?
Бланкмен

Навпаки, насправді. Я використовую find і передаю його результат grep. Більш детальне пояснення я додав вище.
Барбароса

це також працює на Mac? Я спробував 'знайти | grep '\ .sql $', і він вивів інформацію про довідку про використання.
Бланкмен

find - це потужний інструмент, і вам дійсно не потрібно переводити вихід на греп. Це приємне посилання - content.hccfl.edu/pollock/unix/findcmd.htm
Пантера

1
findвже має можливості фільтрації
enzotib

1

Я знаю, що це стара публікація, але я досить нова в цьому, і я знайшла простий спосіб знайти всі файли певного розширення в каталозі та його підкаталогах. Добре, ви спочатку перейдете до того, і parent Directoryтоді find . -name '*.sql'ви знайдете всі файли з розширенням .sql у каталогах та його підкаталогах.

У моєму випадку я хотів видалити всі .xml файли в каталозі та його підкаталогах, тому я зробив більше, що я додав видалити, як тутfind . -name '*.xml' | xargs rm

Сподіваюся, це допоможе комусь :)


2
findрозуміє -deleteкоманду. Не потрібно залучати rm. Або ви можете скористатися -execкомандою, щоб викликати її безпосередньо без обходу через трубу та xargs.
Девід Фоерстер

0
locate -br \\.sql$ | egrep '^/folder/path/'

Якщо він не встановлений, попередньо встановіть його:

sudo apt install mlocate

Для цього потрібен mlocate.dbоновлений екземпляр, який не встановлений поза коробкою в Ubuntu (я вірю). Крім того, чому б не просто locate '/folder/path/*.sql'?
Девід Фоерстер

@DavidFoersterI Я спробував, як ви вказали, але це не працює, я думаю, що регулярний вираз locateмає певні налаштування від використовуваного в регулярному egrep
вираженні

locateвідповідає глобальним виразам, як /folder/path/*.sql, а не регулярним.
Девід Фоерстер

вибачте, але man locateя отримав, -r, --regexp REGEXP - Search for a basic regexp REGEXPтому я припустив, що це регулярний вираз. У будь-якому разі я спробував ваше "глобальне вираження", але не виходить, пробачте
Vzzarr

Будь ласка, прочитайте принаймні перші кілька речень опису, перш ніж ви почнете вибирати вишню із опціону "Синпозіс": "Якщо --regexне вказано, PATTERNs може містити символи глобуса." ( Джерело )
Девід Фоерстер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.