'tar' paketini açın ancak çıkartılacak dizin adını değiştirin.


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Ben ayıklamak istiyorum dosyasını ve adını , karşı klasörün2 . Bu tek gömlek olarak yapılabilir mi?

Yanıtlar:


35

Kullanın -Cve --strip-components(Bkz. man tar).

Örnek:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Açıklama:

-CBayrak katran dosyasının içeriğini içine genişletilebilir böylece bir dizin yer zaten varsayar. bu nedenle mkdir FOLDER.

--strip-componentsBayrak bir tar dosyası doğal bir klasöre kendisini genişletmek o örnekler için github gibi, söz edelim ne zaman kullanılır repo-name-masterklasörü. Tabii ki ilk seviye klasörü burada üretilen bu yüzden gerek olmazdı --strip-componentsayarlı 1sizin için otomatik olarak o ilk klasörü kaldırmak olacaktır. Sayı büyüdükçe, daha derin yuvalanmış klasörler silinir.


Okudum man tar. Tespit etmedi --strip-components. güzel biri
Felipe Alvarez

1
tar-1.14, --strip-path, tar-1.14.90 +, --strip-components kullanır. Belki burada sorun?
Mikhail Moskalev

Bir örnek vermiş olsaydım, sadece anahtarları değil, çevrimiçi el kitabında belirtildiği gibi , 3 argüman stilinin karışıklığa yol açtığını söylerdim.
Iain,

Katran -xz'de -f'yi unuttum, sanırım. Benim için başarısız oldu.
Bunca

17

Bu --transformseçeneği biraz daha fazla esneklik için de kullanabilirsiniz . Herhangi bir sed değiştirme işlemi kabul eder.

Örneğin, bir Linux tarball'ını yeni bir dizine bu şekilde çıkartıyorum, böylece bir yama uygulayabiliyorum:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
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.