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)