Versuche dies:
for file in file.txt
Es wird als "Sequenzausdruck" bezeichnet und ist Teil der Erweiterungsfunktion von Bash . Es funktioniert in Bash 3 und 4.
Die Inkrementierungsfunktion ist neu in Bash 4. Sie haben wahrscheinlich Bash 3.x.
In Bash 4 können Sie Folgendes tun:
$ for i in ; do echo $i; done 1 3 5
In Bash 3 müssen Sie jedoch Folgendes tun, um dieselben Ergebnisse zu erzielen:
$ for ((i=1; i<=6; i+=2)); do echo $i; done
Dasselbe Formular um eins erhöht:
$ for ((i=1; i<=6; i++)); do echo $i; done
Jede der Zahlen kann Variablen oder Ausdrücke sein. In einem Sequenzausdruck müssen die Zahlen jedoch Konstanten sein
Hier ist ein Beispiel, das dieses Formular in Ihren Dateien verwendet:
for ((i=18; i<=31; i++)) do echo "file$.txt" done
Ein weiteres neues Feature von Sequenzausdrücken in Bash 4 ist die Möglichkeit, führende Nullen einzufügen. Dies ist nützlich, wenn Sie nummerierte Dateien erstellen (und verwenden) möchten, die ordnungsgemäß sortiert werden können.
In Bash 4:
touch file.txt
erstellt Dateien mit dem Namen "file001.txt" bis "file010.txt". Ihre Namen werden in der erwarteten Reihenfolge sortiert. Ohne die führenden Nullen würde "file10.txt" vor "file1.txt" sortieren.
Um mit den Dateien zu arbeiten, können Sie dieselbe führende Nullsyntax verwenden:
for file in file.txt; do echo "$file"; done
Wenn Sie in Bash 3 führende Nullen benötigen, müssen Sie den Wert selbst eingeben:
for i in do printf -v i '%03d' $i echo "file$.txt" done
Die printf
Anweisung wird den Wert von i mit führenden Nullen voranstellen, so dass die Breite beispielsweise 3 ist ("4" wird "004").
Bearbeiten:
Leerzeichen in Dateinamen unterzubringen ist unkompliziert:
$ touch "space name "" more spaces" $ ls -l sp* -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces $ for f in "space name "" more spaces"; do mv "$f" "$.txt"; done $ ls -l sp* -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000008 more spaces.txt -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000011 more spaces.txt -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000014 more spaces.txt -rw-r--r-- 1 user group 0 2011-01-22 11:48 space name 000017 more spaces.txt