Supponiamo che io abbia quattro file di testo molto grandi, tutti compressi con xz.
file1.log.xz
file2.log.xz
file3.log.xz
file4.log.xz
Quello che mi piacerebbe fare è concatenare i contenuti non compressi di questi quattro file in un nuovo file file.xz
. Il fatto è che vorrei idealmente non dover passare attraverso i file intermedi.
I file sono file di registro molto grandi di dimensioni gigabyte. Compresso, sono inferiori a 100 MB, ma se dovessi espandere tutti e quattro i file per ricatenarli, avrei bisogno di almeno 30 GB di spazio di archiviazione per archiviare i file non compressi. Potrei, ovviamente, quindi cat
tutti i file non compressi xz
per ricomprimerli:
cat file1.log file2.log file3.log file4.log | xz -ve9 - > newfile.log.xz
So come potrei concatenare due file dalla riga di comando senza un intermedio, supponendo che uno fosse non compresso e uno compresso:
xz -d -c file2.log.xz | cat file1.log - | xz -ve9 - > files1and2.log.xz
Ma questo funzionerà solo per un file e uno di essi deve essere già non compresso.
Non sono sicuro se posso solo insieme cat
i vari file .xz - supponiamo che possano essere stati compressi con parametri diversi.
A un livello superiore, la domanda stessa potrebbe essere posta: puoi prendere l'output di più (più di due) comandi, concatenare tali output e reindirizzarli in un altro processo senza file intermedi? (Scenario ipotetico: immagina che sto facendo una sorta di elaborazione su tutti e quattro i file molto grandi usando uno script che genera output su stdout e che voglio mettere l'output in un altro file compresso.)
È possibile farlo usando solo i comandi di shell?
for file in
sintassi, vorrei poter dare lo stato "corretto" a entrambi! Ma questa risposta è più completa, quindi eccoti.