GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erstellt man ein komprimiertes Tar, wenn die Shell zu viele Dateinamen hat, um sie in einer einzigen Zeile zu erweitern?

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. :)


Linux
  1. So extrahieren Sie die tar.gz-Datei in Linux mithilfe der Befehlszeile

  2. Wie man sudo dazu bringt, sich das Passwort länger zu merken

  3. [Linux] :So schließen Sie das Verzeichnis aus, wenn Sie den Shell-Befehl „tar“ verwenden

  4. Wie trete ich der nächsten Zeile bei, wenn eine Zeile mit einem Regex für das gesamte Dokument in Vi übereinstimmt?

  5. Wie macht man die Aktivitätsleiste der Gnome-Shell immer klein?

So suchen Sie nach Dateien über die Linux-Befehlszeile

Wie ändere ich die Standardzeilenlänge für Od und Hexdump?

Wie lösche ich die Zeilennummer in Vim beim Kopieren?

So umgehen Sie das Linux-Limit zu viele Argumente

Wie bringe ich sudo dazu, nach dem Root-Passwort zu fragen?

Wie drucke ich die letzte Zeile einer gz-komprimierten Datei in der Befehlszeile?