Zippen Sie mehrere Textdateien aus mehreren Verzeichnissen in eine ZIP-Datei in einem Befehl in Bash

1159
nicorellius

Ich habe ein Konto bei AWS und verwende S3 zum Speichern von Daten. Ich habe Befehle, die es mir ermöglichen, Datendateien wie folgt zu komprimieren:

data.zip s3_dir/level-1/level-2/*/*/data.txt 

Es gibt aber beispielsweise 50 oder mehr Stufen. Ich möchte alle data.txt-Dateien von allen Ebenen zusammen komprimieren. Ich bin nicht so scharf auf meine Bash wie ich könnte, also würde jede Hilfe sehr geschätzt.

2
Muss es eine zip-Datei sein? Können Sie stattdessen [gzip] (http://www.mkssoftware.com/docs/man1/gzip.1.asp) verwenden? Es ist nicht dasselbe Format, aber ich weiß, dass es mit der Option -r rekursiv sein kann ... beatgammit vor 13 Jahren 0

1 Antwort auf die Frage

3
Ignacio Vazquez-Abrams
find some/dir -name data.txt | zip -@ data.zip 
Das ist perfekt ... Nachdem ich diese Frage gepostet hatte, gab mir ein Kumpel ein paar Hinweise ... Der Befehl, den ich verwendete, war: `find / some / path -name '* .txt' | xargs -n 100 zip all_data.zip` nicorellius vor 13 Jahren 0
Was ist das "- @" für BTW? nicorellius vor 13 Jahren 0
Es sagt `zip`, dass die Liste der Dateinamen von stdin abgerufen wird, sodass Sie` xargs` nicht verwenden müssen. Ignacio Vazquez-Abrams vor 13 Jahren 0