Suchen Sie nach allen Dateien mit der Erweiterung .sql in Ordnern und Unterordnern


17

Ich möchte nach allen Dateien mit der Erweiterung .sql in Ordnern und Unterordnern suchen (rekursiv).

Wie kann ich das machen?

Antworten:


29

Oder...

find $directory_name -name \*.sql

Beispielsweise

find / -name \*.sql

Oder

find ~ \*.sql

(wobei ~ / home / your_username / entspricht) oder ...

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

und so weiter.


2

Führen Sie dies in der Befehlszeile aus:

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

Ändern Sie '/' in das Verzeichnis, in dem Sie suchen möchten.

Der findBefehl ist in der Lage, die Aufgabe ohne grep (unter Verwendung zusätzlicher Optionen) auszuführen, aber ich finde die obige Verwendung bequemer.

In der Reihenfolge der obigen Befehl:

  1. Ändert das aktuelle Verzeichnis in das Stammverzeichnis ( cd /)
  2. Listet alle Dateien und Verzeichnisse im und unter dem aktuellen Verzeichnis auf ( find)
  3. Filtert die Dateien und Verzeichnisse nach Elementen, die mit ".sql" ( | grep '\.sql$') enden.

danke kannst du es erklären Verwenden Sie grep und übergeben Sie die Ausgabe, um zu finden?
Blankman

Umgekehrt eigentlich. Ich benutze find und gebe seine Ausgabe an grep weiter. Ich habe oben eine detailliertere Erklärung hinzugefügt.
Barbarrosa

würde dies auch auf einem Mac funktionieren? Ich habe versucht, zu finden grep '\ .sql $' und es werden die Informationen zur Verwendung der Hilfe ausgegeben.
Blankman

find ist ein leistungsfähiges Tool, und Sie müssen die Ausgabe wirklich nicht an grep leiten. Dies ist ein netter Link - content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
findhat bereits Filtermöglichkeiten
Enzotib

1

Ich weiß, dass dies ein alter Beitrag ist, aber ich bin ziemlich neu in diesem und ich habe einen einfachen Weg gefunden, um alle Dateien einer bestimmten Erweiterung in einem Verzeichnis und seinen untergeordneten Unterverzeichnissen zu finden. Nun, Sie navigieren zuerst zu " parent Directorythen" find . -name '*.sql'und dann finden Sie alle Dateien mit der Erweiterung " .sql" in den Verzeichnissen und deren Unterverzeichnissen.

In meinem Fall wollte ich alle .xml- Dateien im Verzeichnis und seinen Unterverzeichnissen löschen. Was ich also getan habe, ist, dass ich remove wie hier hinzugefügt habefind . -name '*.xml' | xargs rm

Hoffe das hilft jemandem :)


2
findversteht den -deleteBefehl. Keine Notwendigkeit zu involvieren rm. Oder Sie können den -execBefehl verwenden, um ihn direkt aufzurufen, ohne den Umweg über eine Pipe und xargs.
David Foerster

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

Wenn es nicht installiert ist, installieren Sie es zuvor mit:

sudo apt install mlocate

Dies setzt eine aktuelle mlocate.dbInstanz voraus, die in Ubuntu nicht standardmäßig eingerichtet ist (ich glaube). Warum auch nicht einfach locate '/folder/path/*.sql'?
David Foerster

@DavidFoersterIch habe versucht, wie Sie angegeben, aber es funktioniert nicht, ich denke, Regex in locatehat eine andere Einstellung als Regex in verwendetegrep
Vzzarr

locateEntspricht glob-Ausdrücken /folder/path/*.sql, nicht regulären Ausdrücken.
David Foerster

Entschuldigung, aber man locateich verstehe, -r, --regexp REGEXP - Search for a basic regexp REGEXPalso nahm ich an, dass es ein Regex war. Wie auch immer, ich habe Ihren "globalen Ausdruck" ausprobiert, aber es tut mir leid
Vzzarr

Bitte lesen Sie mindestens die ersten paar Sätze der Beschreibung, bevor Sie mit der Auswahl der Option synposis beginnen: „Wenn --regexnicht angegeben, PATTERNkann s glühende Zeichen enthalten.“ ( Quelle )
David Foerster,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.