2013-03-28 24 views
5

Standart girişten tişört okur ve standart çıktıya ve bir dosyaya yazar.Sıkıştırılmış bir dosyaya dönüştürme

some_command |& tee log 

Bu, tişörtün sıkıştırılmış bir dosyaya yazılmasını mümkün mü?

some_command |& tee -some_option log.bz2 

Eğer tee bunu yapamazsa, başka bir komut var mı?

Ben

some_command |& bzip2 > log.bz2 

ile sıkıştırılmış bir dosyaya çıktı yönlendirebilirsiniz Ama bu komutla, standart çıkışa çıktı eksik.

cevap

4

Eğer standart hataya çıkışınız sahip sorununuz yoksa, bunu yönlendirebilir:

some_command | tee /dev/stderr | bzip2 > log.bz2 

Bu stdout ve stderr (| tee /dev/stderr) hem çıktı tee. Sonra boruları bzip2 stdout (| bzip2 > log.bz2)

+0

Son '2> & 1', 'bzip2' tarafından oluşturulan herhangi bir hata mesajının çıktı dosyasına“ log.bz2' ”yazılacağı anlamına gelir. Sadece bu yönlendirmeyi bırakın ve tüm bunlardan bahsedin ve işte olacaksınız. –

+0

Hmm, güzel çağrı. – craig65535

4

Kabuk bash (sürüm 4.x), sen 'process substitution' varsa ve kullanabilirsiniz ise:

some_command 2>&1 | tee >(bzip2 -c > log.bz2) 

Bu standart hatasını ve standart çıktıyı yönlendirir tee (|& gibi, ancak klasik gösterimi tercih ederim). tee'un çıktısının kopyası bir dosya yerine bir işleme gönderilir; İşlem, standart girişini standart çıktıya sıkıştırılmış formatta yazan bzip2 -c > log.bz2'dur. Çıktının diğer (sıkıştırılmamış) kopyası elbette standart çıktıya yönelir.