Tarball ayıklarken hedef dizin oluşturun


25

mkdir -pTar komutumda var olmayan bir hedef dizini tanımlayabildiğim yere benzer bir hedef dizin oluşturmak mümkün mü ve tar benim için dizini oluşturacak mı?

Çıktıyı kullanarak bir dizine yönlendirebileceğimi biliyorum tar -C /target/dir, ancak hedef dizin yoksa bu çalışmaz.


4
Bu mümkün değilse, her zaman bir kabuk takma adı oluşturabilirsiniz.
n0pe

Yanıtlar:


38
mkdir -p /target/dir && tar -C /target/dir

3
Kaşıkla beslenmek yok, düz ve noktaya.
Amado Martinez

10
Küçük değişiklik önerdi:mkdir -p /target/dir && tar -C $_
Mark Melville

@MarkMelville bize $ _ burada ne olması gerektiğini
anlatıyor

@Suhayb $_, Bash'in önceki komutun son argümanına genişleyen özel bir parametredir.
ConceptRat

13
tar -xvf bash.html_node.tar.gz --one-top-level

Tar komutunun man sayfasından

--one-top-level[=DIR]

    Tüm dosyaları DIR içine veya argüman olmadan kullanılırsa, arşivin temel adı ile adlandırılan bir alt dizine çıkarın (eksi standart sıkıştırma sonekleri tarafından tanınabilir --auto-compress).

----- Ölçek

test 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// eğer tgz adı arşivin kök_dizini ile aynıysa, başka bir etki olmaz

test 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// eğer tgz ismi arşivin root_dir dizini ile aynı değilse, bir üst seviye dir oluşturun


3
GNU katranı gerektirir? Mac varsayılan bsd tar bu seçeneğe sahip değildir.
Curtis Yallop

1
Evet, bu daha açık bir şekilde belirtilmelidir.
kcrisman

5

Bu bana daha anlamlı geldi: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirBen -panahtarı oldukça anlamadım rağmen klasörü yapar . &&ikinci bir komutu çalıştırmanıza izin verir. Tipik tar anahtarları kullandım ama sonunda -Cdizinleri değiştirmek ve gereken yere çıkarmak için kullandım.

başvuru: arşivde bulunan dosyaları ayıklamak-tar-gz-den-yeni-dizine-adlandırılmış-arşiv


2
Dizin zaten varsa, -p anahtarı hata atmaz.
David,

@David ayrıca var olan herhangi bir öncü dizini de yaratacaktır, yani mevcut /createdeğilse yaratacaktır .
Antonio Pérez

1

Oluşturulacak yolları bilmiyorsanız ...
Tar dosyasından gerekli yolları alın, sonra oluşturun ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
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.