Cari semua file dengan ekstensi .sql di folder dan sub folder

17

Saya ingin mencari semua file dengan ekstensi .sql di folder dan sub-folder (rekursif).

Bagaimana saya bisa melakukan ini?

Blankman
sumber

Jawaban:

29

Atau...

find $directory_name -name \*.sql

Sebagai contoh

find / -name \*.sql

Atau

find ~ \*.sql

(di mana ~ menyamakan dengan / home / your_username /), atau ...

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

Dan seterusnya.


sumber
2

Jalankan ini di baris perintah:

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

Ubah '/' ke direktori yang ingin Anda cari.

The findPerintah mampu menyelesaikan tugas tanpa grep (menggunakan opsi tambahan), tapi saya menemukan penggunaan di atas lebih nyaman.

Secara berurutan, perintah di atas:

  1. Mengubah direktori saat ini ke direktori root ( cd /)
  2. Daftar semua file dan direktori pada dan di bawah direktori saat ini ( find)
  3. Memfilter file dan direktori untuk apa pun yang berakhir dengan '.sql' ( | grep '\.sql$')
Barbarrosa
sumber
Terima kasih, bisakah Anda menjelaskannya? Anda menggunakan grep dan meneruskan outputnya untuk menemukan?
Blankman
Begitu juga sebaliknya. Saya menggunakan find dan meneruskan outputnya ke grep. Saya menambahkan penjelasan lebih rinci di atas.
Barbarrosa
apakah ini akan bekerja pada Mac juga? Saya mencoba 'menemukan | grep '\ .sql $' dan itu mengeluarkan info bantuan penggunaan.
Blankman
find adalah alat yang ampuh dan Anda benar-benar tidak perlu menyalurkan output ke grep. Ini adalah tautan yang bagus - content.hccfl.edu/pollock/unix/findcmd.htm
Panther
1
findtelah memfilter kemampuan
enzotib
1

Saya tahu bahwa ini adalah posting lama, tetapi saya cukup baru dalam hal ini dan saya telah menemukan cara mudah untuk menemukan semua file dari ekstensi tertentu dalam direktori dan subdirektori anak-anaknya. Yah Anda pertama kali menavigasi ke parent Directoryitu find . -name '*.sql'dan itu akan menemukan Anda semua file dengan ekstensi .sql di direktori dan subdirektori.

Dalam kasus saya, saya ingin menghapus semua file .xml di direktori dan subdirektori, jadi yang saya lakukan lebih banyak adalah saya menambahkan hapus seperti di sinifind . -name '*.xml' | xargs rm

Semoga ini bisa membantu seseorang :)

M090009
sumber
2
findmengerti -deleteperintahnya. Tidak perlu terlibat rm. Atau Anda dapat menggunakan -execperintah untuk menjalankannya secara langsung tanpa jalan memutar melalui pipa dan xargs.
David Foerster
0
locate -br \\.sql$ | egrep '^/folder/path/'

Jika tidak diinstal, maka instal sebelumnya dengan:

sudo apt install mlocate
Vzzarr
sumber
Ini membutuhkan mlocate.dbinstance terkini yang tidak diatur di luar kotak di Ubuntu (saya percaya). Juga, mengapa tidak sederhana saja locate '/folder/path/*.sql'?
David Foerster
@DavidFoersterI Saya mencoba seperti yang Anda tentukan tetapi tidak berhasil, saya kira regex di locatememiliki beberapa pengaturan berbeda dari regex yang digunakan dalamegrep
Vzzarr
locatecocok dengan ekspresi glob seperti /folder/path/*.sql, bukan ekspresi reguler.
David Foerster
maaf, tapi dari man locatesaya -r, --regexp REGEXP - Search for a basic regexp REGEXPjadi saya menganggap itu adalah regex. Pokoknya saya mencoba "ekspresi global" Anda tetapi tidak berhasil, maaf
Vzzarr
Harap baca setidaknya beberapa kalimat pertama dari deskripsi sebelum Anda mulai memilih dari pilihan synposis: "Jika --regextidak ditentukan, PATTERNs dapat berisi karakter globbing." ( Sumber )
David Foerster