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
RikSaunderson
quelle
Statt einer forSchleife, sollten Sie Rohr findin while.
Bis auf weiteres angehalten.

Antworten:

277

verwenden

find . -name 'mystring*'
Sergio Tulentsev
quelle
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' *

Jacanterbury
quelle
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 {} \;
Watson Kepson
quelle