Verwenden Sie als robuste Lösung find
um Dateinamen durch ein Nullzeichen zu trennen und dann direkt an tar
zu leiten , die durch Null getrennte Eingaben liest:
find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -
Dies wird jetzt alle verarbeiten Dateinamen korrekt und ist auch nicht durch die Anzahl der Dateien begrenzt.
Mit ls
Das Generieren einer Liste von Dateinamen, die von einem anderen Programm analysiert werden sollen, ist ein gängiges Antimuster, das nach Möglichkeit vermieden werden sollte. find
kann eine durch Null getrennte Ausgabe generieren (-print0
), die die meisten Dienstprogramme lesen oder weiter analysieren können. Da das Nullzeichen das einzige Zeichen ist, das nicht in einem Dateinamen vorkommen darf (und der /
, offensichtlich), damit bist du immer auf der sicheren Seite.
Nein, Sie können nichts an eine komprimierte TAR-Datei anhängen, ohne sie vorher zu dekomprimieren.
Allerdings kann tar seine Liste der zu verarbeitenden Dateien von einer Datei akzeptieren, also können Sie einfach Folgendes tun:
ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt
@slhck weist darauf hin, dass die obige Lösung nicht funktioniert, wenn Ihre Dateinamen Leerzeichen (und wahrscheinlich andere lästige Zeichen) enthalten. Diese Version schließt jeden Dateinamen in doppelte Anführungszeichen ein:
ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt
(Dies wird natürlich brechen, wenn Sie doppelte Anführungszeichen in Ihren Dateinamen haben, in diesem Fall bekommen Sie, was Sie verdienen. :)