Alle Dateien mit einem Dateinamen suchen, der mit einer angegebenen Zeichenfolge beginnt?


148

Ich habe ein Verzeichnis mit ungefähr 100000 Dateien und möchte eine Funktion für alle Dateien ausführen, die mit einer angegebenen Zeichenfolge beginnen, die möglicherweise mit Zehntausenden von Dateien übereinstimmt.

Ich habe versucht

ls mystring*

Dies gibt jedoch den Bash-Fehler 'Zu viele Argumente' zurück. Mein nächster Plan war zu verwenden

find ./mystring* -type f

Dies hat jedoch das gleiche Problem.

Der Code muss ungefähr so ​​aussehen

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

Statt einer forSchleife, sollten Sie Rohr findin while.
Bis auf weiteres angehalten.

Antworten:


277

verwenden

find . -name 'mystring*'

10
und um eine Funktion "find. -name 'mystring *' -exec [Befehl]" auszuführen, löschen Sie beispielsweise "find. -name 'mystring *' -exec rm {} \;"
Eldar

2
Wobei {} ein Platzhalter für den Dateinamen ist :-) (damit Sie Ihre eigenen Aktionen
erstellen

1
Dies scheint alle Ergebnisse zurückzugeben, die die Zeichenfolge enthalten? The
Brian Z

7
... oder find . -iname 'mystring*'für die Suche ohne Berücksichtigung der Groß- und Kleinschreibung.
Frank Nocke

OP bezieht sich auf ein einzelnes Verzeichnis, also fügen Sie es -maxdepth 1vor dem ein -name, um die Suche auf den aktuellen Ordner zu beschränken
jacanterbury

27
ls | grep "^abc"  

Sie erhalten alle Dateien, die mit dem Teilstring beginnen (was das OP speziell benötigt) abc.
Es wird nur im aktuellen Verzeichnis ausgeführt, während es findrekursiv in Unterordnern ausgeführt wird.

Zur Verwendung findfür nur Dateien beginnend mit der Zeichenfolge try

finden . -name 'abc' *


4

Wenn Sie Ihre Suche nur auf Dateien beschränken möchten, sollten Sie diese -type fbei Ihrer Suche verwenden

Versuchen Sie, die -inameSuche auch ohne Berücksichtigung der Groß- und Kleinschreibung zu verwenden

Beispiel:

find /path -iname 'yourstring*' -type f

Sie können auch einige Operationen an Ergebnissen ohne Pipe-Zeichen oder Xargs ausführen

Beispiel:

Suchen Sie nach Dateien und zeigen Sie deren Größe in MB an

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
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.