Rechercher tous les fichiers avec une extension .sql dans les dossiers et sous-dossiers


17

Je souhaite rechercher tous les fichiers portant l'extension .sql dans les dossiers et sous-dossiers (récursifs).

Comment puis-je faire ceci?

Réponses:


29

Ou...

find $directory_name -name \*.sql

Par exemple

find / -name \*.sql

Ou

find ~ \*.sql

(où ~ équivaut à / home / votre_nom_utilisateur /), ou ...

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

et ainsi de suite.


2

Exécutez ceci dans la ligne de commande:

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

Remplacez «/» par le répertoire que vous souhaitez rechercher.

La findcommande est capable d'accomplir la tâche sans grep (en utilisant des options supplémentaires), mais je trouve l'utilisation ci-dessus plus pratique.

Dans l'ordre, la commande ci-dessus:

  1. Change le répertoire courant en répertoire racine ( cd /)
  2. Répertorie tous les fichiers et répertoires au niveau et en dessous du répertoire actuel ( find)
  3. Filtre les fichiers et les répertoires pour tout ce qui se termine par '.sql' ( | grep '\.sql$')

merci, pouvez-vous l'expliquer? vous utilisez grep et passez sa sortie pour trouver?
Blankman

Vice versa, en fait. J'utilise find et passe sa sortie à grep. J'ai ajouté une explication plus détaillée ci-dessus.
Barbarrosa

cela fonctionnerait-il aussi sur un Mac? J'ai essayé de trouver | grep '\ .sql $' et il a généré les informations d'aide à l'utilisation.
Blankman

find est un outil puissant et vous n'avez vraiment pas besoin de diriger la sortie vers grep. Ceci est un bon lien - content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
finda déjà des capacités de filtrage
enzotib

1

Je sais que c'est un vieux post, mais je suis assez nouveau dans ce domaine et j'ai trouvé un moyen facile de trouver tous les fichiers d'une certaine extension dans un répertoire et ses sous-répertoires enfants. Eh bien, vous accédez d'abord au parent Directorypuis find . -name '*.sql'et vous trouverez tous les fichiers avec l' extension .sql dans les répertoires et ses sous-répertoires.

Dans mon cas, je voulais supprimer tous les fichiers .xml dans le répertoire et ses sous-répertoires, donc ce que j'ai fait de plus, c'est que j'ai ajouté remove comme icifind . -name '*.xml' | xargs rm

J'espère que cela aide quelqu'un :)


2
findcomprend la -deletecommande. Pas besoin d'impliquer rm. Ou vous pouvez utiliser la -execcommande pour l'invoquer directement sans détour par un tuyau et xargs.
David Foerster

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

S'il n'est pas installé, installez-le auparavant avec:

sudo apt install mlocate

Cela nécessite une mlocate.dbinstance à jour qui n'est pas configurée prête à l'emploi dans Ubuntu (je blieve). Et pourquoi pas tout simplement locate '/folder/path/*.sql'?
David Foerster

@DavidFoersterI J'ai essayé comme vous l'avez spécifié mais cela ne fonctionne pas, je suppose que regex dans locatea un paramètre différent de regex utilisé dansegrep
Vzzarr

locatecorrespond aux expressions globales comme /folder/path/*.sql, et non aux expressions régulières.
David Foerster

désolé, mais man locateje comprends -r, --regexp REGEXP - Search for a basic regexp REGEXPdonc j'ai supposé que c'était une expression régulière. Quoi qu'il en soit, j'ai essayé votre "expression globale" mais ne fonctionne pas, je suis désolé
Vzzarr

Veuillez lire au moins les premières phrases de la description avant de commencer à choisir parmi la synposis des options: «Si --regexn'est pas spécifié, PATTERNs peut contenir des caractères globuleux.» ( Source )
David Foerster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.