
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-<->/myfile
oder zB mycommand dir-<3-42>/myfile
fü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 $n
zu einer Ganzzahl erweitert wird.
Antwort2
find . -type f -name myfile | xargs command