jph hat geschrieben: 29.12.2017 20:55:16
Sehr quick and sehr dirty in der bash:
Code: Alles auswählen
for i in `ls dateien/`; do tar -cf $i.tar dateien/$i; done
Bitte nicht solche Hacks verwenden.
Alleine die Verwendung von ls, macht das Ganze zum Glücksspiel, da der Output von ls, wie auch von bspw. find, je nach Datei/Verzeichnisnamen mitunter große Probleme verursacht.
Wenn man Dateien und Verzeichnisse in Schleifen abarbeiten will, nutzt man am besten das interne Bash-Globbing, und spart sich Abhängigkeiten zu Zusatzprogrammen.
Und jenes Bash-Globbing ermoglicht auch viele Formen der Filterung, nach Dateien, Verzeichnissen oder auch jeweiliges gezielt zu ignorieren.
Beispiel:
Code: Alles auswählen
#!/bin/bash
shopt -s dotglob globstar
source="/home/user/test"
destination="/home/user/finished"
for file in "$source"/**/
do
tar -cf "$file" "$destination/$file-$(date +%d:%m:%g-%H:%M:%S).tar"
done
Das wäre jetzt eine sicherere Variante, die auch unempfindlich gegen Leerzeichen und exotische Datei/Verzeichnisnamen wäre.
Es werden nur ganze Verzeichnisse (**/) rekursiv abgearbeitet, keine einzelnen Dateien (**/*), und vorhandene Dateien werden auch nicht überschrieben.
Kann das Shellscript zwar gerade nicht testen, doch normal sollte das so funktionieren.