Wieso komprimierst Du denn Dateien einzeln mit rar
? Das ist doch ein Archivierungsprogramm, also hauptsächlich dafür gedacht, mehrere Dateien komprimiert in ein Archiv zu packen. Wenn Du nur einzelne Dateien komprimieren willst, sind gzip
, bzip2
oder xz
bessere Alternativen. Oder Du wählst ein Archivformat, das Aktualisierungen einigermaßen effizient zulässt (z.B. zip) und packst alle Dateien in ein Archiv.
thor17 schrieb:
| a=1; find . -type f -printf "%f\n" -exec bash -c "/usr/bin/rar a -m5 /media/zeugs/NAME_$a; a=a+1" '{}' \;
|
Es funktioniert noch nich ganz so wie es soll. Das Problem scheint mir zu sein, dass a nach einem Durchlauf nicht inkrementiert wird. Deshalb fügt rar dann die nächsten Dateien immer dem Archiv NAME_1.rar hinzu.
Logisch, denn Subprozesse können eine Variable in einem Elternprozess nicht ändern. Es fängt schon damit an, dass Du $a nicht exportierst. Also sehen die Kinder den initialen Wert nicht.
Wenn Du exportierst, dann rufst Du das Bash-Skript immer noch pro gefundener Datei auf, so dass die Zählung immer bei 1 anfängt. Du könntest das dadurch verbessern, dass Du in dein Bash-Skript nach "-exec" eine Schleife über die Kommandozeilenargumente baust und dann statt "{} \;" "– {} +" verwendest. Es ist aber nicht garantiert, dass find
nur einen Aufruf macht - das hängt von der Anzahl gefundener Dateien ab.
In der bash
kannst Du das so lösen:
| find $dir -type f -print0 | {
a=1
while read -rd '' name; do
echo "$((a++)) - $name"
done
}
|
Was ist eigentlich Dein Ziel? Das sieht mir nach Datensicherung aus. Da gibt es doch schon reichlich Lösungen.