Bir tarball'dan belirli bir dizini nasıl ayıklayabilirim? ve önde gelen bir dizini çıkarmak?


12

Wordpress tarball'dan belirli bir dizini ayıklamak istiyorum. özellikle wp-includesiçin .. Görünüşe göre tarball içindeki dizin yapısı, wordpress/wp-includesancak ./wp-includesçıkarıldıktan sonra ihtiyacım var, önde gelen wordpress dizini yok. Bunu nasıl yaparım?

Yanıtlar:


13

Belirli bir dizini (ve içeriğini özyinelemeli olarak) ayıklamak için, onu komut satırına fazladan bir bağımsız değişken olarak iletmeniz yeterlidir. İle GNU tar , sen bir lider dizini şerit olabilir --strip-componentsseçeneğiyle (ve daha genel olarak dosya isimleri dönüşümü --transform). Linux olmayan sistemlerde pax (POSIX'te bulunur, ancak bazı Linux dağıtımları varsayılan kurulumlarından atlar) ve -sseçeneğini kullanabilirsiniz.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Her şeyi boş isme yeniden yazmak için bir kural ekleyerek dahil etme listesini yeniden yazma kuralları ile birleştirebilirsiniz (“çıkartma” anlamına gelir; kural yalnızca önceki kurallar eşleşmediğinde geçerlidir).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

GNU katranınız olduğunu varsayarsak, şunları kullanabilirsiniz --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

BSD tar'ın mevcut sürümlerinin de desteklediğine inanıyorum --strip-components. En kötü durumda, şunları yapabilirsiniz:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

İkincisini sadece aceleyle yaptım, ancak ilkinin var olduğunu bilmek güzel.
— Kasım'da xenoterracide

Soyulmuş bileşenin (örn. wordpress) Açıkça isimlendirilmesini gerektirmeyen bir komut kullanılabilir mi? GitHub önceden bilmiyorum soyulmuş bileşen git revizyon içeren tarballs ayıklarken buna ihtiyacım var.
— tjanez
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.