Dosyalar farklı dizinlerde saklandığında üst dizini eklemeden bir tar arşivi oluşturma


11

Dosya sisteminde aşağıdaki dört dosya var:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Bu dosyaları bir tar arşivine koymam gerekiyor, ancak dizin eklemek istemiyorum. Ben gelip en iyi oldu:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Bu hala mükemmel değil, çünkü arşivdeki her dosya iki dizin derinliğinde. Daha iyi bir yol var mı? Ya da basitçe kopyalamak gerekiyor s1, s2, r3ve r5bir dizine dosya ve birlikte arşiv oluşturmak tar -czvf archive.tgz s1 s2 r3 r5?

Yanıtlar:


17

-CBirden çok kez kullanabilirsiniz (bir dizinden diğerine geçerek):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Her -Cseçeneğin o noktadaki geçerli dizine göre yorumlandığını (veya yalnızca mutlak yolları kullanabileceğinizi) unutmayın.


11

Bir dosyadaki dosyaların listesine sahipseniz veya bunları bir komut kullanarak oluşturabilirseniz, tek bir GNU tar komutu kullanabilirsiniz:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

Dönüşüm hala dizinleri tutar, ancak düzeni tamamen düzleştirir. Dizinleri filtrelemek için bir yol gerekir, bu nedenle bir dosya listesi gerekir.


8

Arşive birer birer dosya ekleyebilirsiniz:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Bunu daha kolay hale getirmek için komut dosyası oluşturabilirsiniz: her yol tar rfiçin, -Cparametrenin değeri olarak temel dizini ve eklenecek yol olmadan temel dosya adını çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.