Cerca tutti i file con estensione .sql in cartelle e sottocartelle


17

Voglio cercare tutti i file con estensione .sql in cartelle e sottocartelle (ricorsive).

Come posso fare questo?

Risposte:


29

O...

find $directory_name -name \*.sql

Per esempio

find / -name \*.sql

O

find ~ \*.sql

(dove ~ equivale a / home / nome_utente /) o ...

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

e così via.


2

Esegui questo nella riga di comando:

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

Cambia '/' nella directory che vuoi cercare.

Il findcomando è in grado di eseguire l'attività senza grep (utilizzando opzioni extra), ma trovo più conveniente l'utilizzo di cui sopra.

In ordine, il comando sopra:

  1. Cambia la directory corrente nella directory root ( cd /)
  2. Elenca tutti i file e le directory nella e sotto la directory corrente ( find)
  3. Filtra i file e le directory per tutto ciò che termina con '.sql' ( | grep '\.sql$')

grazie, puoi spiegarlo? stai usando grep e passando il suo output per trovare?
Blankman,

Viceversa, in realtà. Sto usando find e passando il suo output a grep. Ho aggiunto una spiegazione più dettagliata sopra.
Barbarrosa,

funzionerebbe anche su un Mac? Ho provato a "trovare | grep '\ .sql $' e ha fornito le informazioni di aiuto per l'uso.
Blankman,

find è uno strumento potente e non è necessario reindirizzare l'output a grep. Questo è un bel link - content.hccfl.edu/pollock/unix/findcmd.htm
Pantera

1
findha già funzionalità di filtro
enzotib,

1

So che questo è un vecchio post, ma sono piuttosto nuovo in questo e ho trovato un modo semplice per trovare tutti i file di una determinata estensione in una directory e nelle sue sottodirectory secondarie. Bene, prima vai su parent Directoryallora find . -name '*.sql'e troverai tutti i file con estensione .sql nelle directory e nelle sue sottodirectory.

Nel mio caso volevo eliminare tutto il .xml file nella directory e nelle sue sottodirectory, quindi quello che ho fatto di più è che ho aggiunto Rimuovi come quifind . -name '*.xml' | xargs rm

Spero che questo aiuti qualcuno :)


2
findcapisce il -deletecomando. Non c'è bisogno di coinvolgere rm. Oppure puoi usare il -execcomando per invocarlo direttamente senza la deviazione attraverso una pipe e xargs.
David Foerster,

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

Se non è installato, installarlo in precedenza con:

sudo apt install mlocate

Ciò richiede mlocate.dbun'istanza aggiornata che non è configurata immediatamente in Ubuntu (I blieve). Inoltre, perché non semplicemente locate '/folder/path/*.sql'?
David Foerster,

@DavidFoersterI Ho provato come specificato, ma non funziona, immagino che regex locateabbia impostazioni diverse da regex utilizzate inegrep
Vzzarr,

locatecorrisponde a espressioni glob come /folder/path/*.sql, non espressioni regolari.
David Foerster,

scusa, ma da man locatequando -r, --regexp REGEXP - Search for a basic regexp REGEXPho capito, ho pensato che fosse una regex. Comunque ho provato la tua "espressione globale" ma non funziona, mi dispiace
Vzzarr,

Si prega di leggere almeno le prime frasi della descrizione prima di iniziare a scegliere la ciliegina dalla sinergia delle opzioni: "Se --regexnon specificato, gli PATTERNs possono contenere caratteri sconvolgenti". ( Fonte )
David Foerster,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.