Führen Sie den Befehl für gleichnamige Dateien aus mehreren Verzeichnissen aus

Führen Sie den Befehl für gleichnamige Dateien aus mehreren Verzeichnissen aus

Ich möchte einen Befehl ausführen, der mehrere Argumente annimmt, die sich in verschiedenen Verzeichnissen unter demselben Dateinamen befinden, z. B.

mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile

Ich suche nach einem Shell-Befehl, der alle Dateien in Unterverzeichnissen mit Nummern von 1 bis 48 oder einer beliebigen Zahl als Befehlsargumente ablegen kann.

Antwort1

Sie können das Standard-Globbing von Dateinamen verwenden, z. B. für alle dreistelligen Zahlen (in der Reihenfolge):

$ mycommand dir-[0-9][0-9][0-9]/myfile

Beim grundlegenden Globbing benötigen Sie ein Muster für einstellige Zahlen, eines für zweistellige Zahlen usw.

$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile

Zsh (aber nicht andere Shells) unterstützt auch mycommand dir-<->/myfileoder zB mycommand dir-<3-42>/myfilefür die Verzeichnisse mit den Nummern 3 bis 42.

Oder wenn Sie die Klammererweiterung bevorzugen (und Ihre Shell dies unterstützt):

$ mycommand dir-{1..3}/myfile

Wenn Ihre Verzeichnisnamen führende Nullen enthalten, setzen Sie diese in Klammern, z. B. dir-{001..048}/myfile.

Mit Klammererweiterung können Sie auch Folgendes tun (in ksh93 und zsh, aber nicht in bash):

$ mycommand dir-{1..$n}/myfile

wobei $nzu einer Ganzzahl erweitert wird.

Antwort2

find . -type f -name myfile | xargs command

verwandte Informationen