Поиск всех файлов с расширением .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$'

Измените '/' на каталог, который вы хотите найти.

Команда findспособна выполнить задачу без grep (используя дополнительные параметры), но я считаю, что приведенное выше использование более удобно.

По порядку вышеприведенная команда:

  1. Изменяет текущий каталог на корневой каталог ( cd /)
  2. Выводит список всех файлов и каталогов в и ниже текущего каталога ( find)
  3. Фильтрует файлы и каталоги для всего, что заканчивается на .sql ( | grep '\.sql$')
Barbarrosa
источник
спасибо, вы можете это объяснить? вы используете grep и передаете его вывод, чтобы найти?
Бланкмен
На самом деле наоборот. Я использую find и передаю его вывод в grep. Я добавил более подробное объяснение выше.
Барбарроса
будет ли это работать на Mac тоже? Я пытался найти | grep '\ .sql $' и выводит справочную информацию об использовании.
Бланкмен
find - мощный инструмент, и вам не нужно передавать результаты в grep. Это хорошая ссылка - content.hccfl.edu/pollock/unix/findcmd.htm
Пантера
1
findуже имеет возможности фильтра
enzotib
1

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

В моем случае я хотел удалить все XML- файлы в каталоге и его подкаталогах, так что я сделал больше, что я добавил удалить, как здесьfind . -name '*.xml' | xargs rm

Надеюсь, это поможет кому-то :)

M090009
источник
2
findпонимает -deleteкоманду. Не нужно привлекать rm. Или вы можете использовать -execкоманду, чтобы вызвать ее напрямую, без обхода через канал и xargs.
Дэвид Фёрстер
0
locate -br \\.sql$ | egrep '^/folder/path/'

Если он не установлен, предварительно установите его с помощью:

sudo apt install mlocate
Vzzarr
источник
Для этого требуется обновленный mlocate.dbэкземпляр, который не настроен из коробки в Ubuntu (я полагаю). Кроме того, почему бы не просто locate '/folder/path/*.sql'?
Дэвид Фёрстер
@DavidFoersterI Я пробовал, как вы указали, но это не работает, я думаю, что в регулярном выражении locateесть несколько другие настройки, чем в регулярном выраженииegrep
Vzzarr
locateСоответствует глобальным выражениям, таким как /folder/path/*.sqlрегулярные выражения.
Дэвид Фёрстер
извини, но man locateя понял, -r, --regexp REGEXP - Search for a basic regexp REGEXPчто предположил, что это регулярное выражение. Во всяком случае, я попробовал ваше «глобальное выражение», но не работает, извините
Vzzarr
Пожалуйста, прочитайте, по крайней мере, первые несколько предложений описания, прежде чем вы начнете выбирать вишню из опции «Синтез»: «Если --regexне указано, то PATTERNs может содержать символы-заглушки». ( Источник )
Дэвид Фёрстер,