Wo sich dieses Skript befindet, habe ich mehrere Unterverzeichnisse, in denen ich einen einzigen Befehl für alle Inhalte ausführen möchte. Der Inhalt ist ebenfalls in aufsteigender Reihenfolge nummeriert. Wenn Sie for f in *
in Ordnern mit mehr als 10 Elementen verwenden, werden die Dateien 10
oder 11
nacheinander vor 1..9
angezeigt.Dateien in numerischer Reihenfolge verarbeiten
Darüber hinaus variiert die Anzahl der Dateien in jedem Unterverzeichnis zwischen 6 und 12 Elemente, also glaube ich nicht, dass ich einfach eine Bereichsoperation wie {1..12}
ausführen kann, weil ich Warnungen/Fehler über nicht vorhandene Dateien vermeiden möchte.
Frage: Gibt es eine Möglichkeit zum Forcen oder Ändern der FOR-Schleife zur Aufrechterhaltung der aufsteigenden numerischen Reihenfolge beim Iterieren über den gesamten Inhalt eines Ordners, ohne die Menge des Ordners zu kennen?
term="" # hold accumulated filenames
for d in */ ; do # iterate over sub-directories
cd $d
for f in * ; do # iterate over files in sub-directory
term="$term $f"
done
# run a command using the string $term
term=""
cd ..
done
Randbemerkung: Ich getaggt sh
, shell
und bash
da sie alle für dieses Problem sind. Ich lese Difference between sh and bash vor dem Hinzufügen beider Tags, um sicherzustellen, dass es eine gültige Wahl wäre, obwohl es einige Syntax/Portabilitätsvariationen und dergleichen gibt.
Danke für das Beispiel @resc, es hilft. –