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.