'Tar' komutunu kullanarak dosyaları başka bir dizine nasıl ayıklayabilirim?

Sandım ki tar archive.tar /users/mylocation işe yarardı ama olmuyor. Bunu nasıl yapabilirim?

Bir arşivi geçerli dizinden farklı bir dizine ayıklamak için şu adımları izleyin: -C, veya --directory, katran seçeneği, olduğu gibi

tar -xf archive.tar -C /target/directory

Bu komutu çalıştırmadan önce hedef dizinin bulunması gerektiğini unutmayın (bu komut tarafından oluşturulabilir mkdir /target/directory).

Oku kullanım kılavuzu sayfası (komut: man tar) diğer seçenekler için.

Tarball'unuz zaten değiştirmek istediğiniz bir dizin adı içeriyorsa, aşağıdakileri ekleyin: --strip-components=1 seçenek:

tar xf archive.tar -C /target/directory --strip-components=1

Önceki cevapları ve yorumları birleştirme:

Sadece içeriği ayıklamak ve eksikse hedef dizin oluşturmak için:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Zip dosyasındaki kök (birinci düzey) dizini ayıklamak ve kaldırmak için

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

Başka bir seçenek de --bir-üst düzey kullanmaktır. Bu, orijinalin dosya adına göre otomatik olarak bir dizin oluşturacaktır.

tar zxvf filename.tgz --one-top-level

Ayrıca, isterseniz kendinizinkini belirtebilirsiniz ve tar bunu otomatik olarak oluşturacaktır.

tar zxvf filename.tgz --one-top-level=new_directory

Ekstraksiyonla ilgili ilginç bulduğum şey, arşivi nasıl oluşturduğunuza bağlı olmasıdır, bu örneğe bakın

cd /tmpmkdir foldertouch folder/file.txt

bunu yaptığında tar -zcvf folder.tar.gz folder her şey beklendiği gibi = şimdi kaldırdığınızda, kaldırılmaz (kaldırdıysanız klasör oluşturulur) /tmp/folder/.

Ancak, katranı ne zaman yaratacaksınız tar -zcvf tmp-folder.tar.gz /tmp/folder ve bunu / tmp klasöründe çözerseniz, sonuç şöyle olur: /tmp/tmp/folder dizin! Böyle bir durumda, bunu çözmeniz gerekir / - tar -xf tmp-folder.tar.gz -C /

@Ujjwal Sing : Gerçekten de, tar man sayfası o kadar yararlı değil. “-C dizini” ni “dizin dizinine değiştir” olarak tanımlar. Daha da kötüsü: "tar -C mydır xf arşivi.tar "çalışmıyor, “tar xf arşivi.tar -C mydir” yapar.

Ayrıca, -C, --directory dizini \n dizin dizinine değiştir' yerine çıktı dizinini DİR olarak değiştir (DİR yoksa başarısız olur)` olarak tanımlanmalıdır. Teşekkürler @Mich. Ayrıca @Bryan_larsen’in cevabına da bakın.

@PatMorin Adil olmak gerekirse, kullandığınız argüman çağırma kurallarını anladığınızda mantıklı olur. Tar xfC arşivini de yapabilirsiniz.tar mydir’ veya 'tar -C mydir -xf arşivi.katran`. Sadece şeyleri kıran geleneksel tarz ve GNU tarzı bayrakları karıştırıyor… dürüst olmak gerekirse beklenen bir şey. Geleneksel bayrakların tümü ilk bağımsız değişken olarak tek bir blob olarak geçirilir. Eğer ilk değillerse onların çalışmasını bekleyemezsin. (Demek istediğim, evet, yine de yorumlamak mümkün - demek istediğim, bu standartın üstünde ve ötesinde, standart değil)