Başka bir dizindeki tar.gz nasıl sıkıştırılır


270

Bir arşivim var

* .tar.gz

Bir hedef dizinde bunu nasıl açabilirim?


9
Neden tüm inişler? Sadece -C'den daha fazla seçenek var (ve belki de sürümü bunu sağlamaz).
Alfe

2
Stack Overflow, programlama ve geliştirme soruları için bir sitedir. Bu soru konu dışı gibi görünüyor çünkü programlama veya geliştirme ile ilgili değil. Yardım Merkezi'nde hangi konular hakkında soru sorabilirim konusuna bakın . Belki Süper Kullanıcı veya Unix & Linux Stack Exchange sormak için daha iyi bir yer olurdu.
jww

@jww Ben senin noktasını görürken biz de bu forumda tarve gzçevresinde etiket var . Bir tarball'ı belirli bir dizine çıkarmak bir kabuk betiğinin parçası olabilir ve bu nedenle programlamanın bir parçası olabilir. Sanırım bu tür bir soru her iki forumda da sorulabilir.
Alfe

Yanıtlar:


319

Gnu sürümünü kullanmanız durumunda istediğiniz hedef dizini vermek için seçeneği -C(veya --directoryuzun seçenekleri tercih ediyorsanız) kullanabilirsiniz tar. Dizin mevcut olmalıdır:

mkdir foo
tar -xzf bar.tar.gz -C foo

tarBelirli bir dizine ayıklama yeteneğini kullanmıyorsanız cd, aramadan önce hedef dizininize kolayca girebilirsiniz tar; elbette arşivinize tam bir yol vermeniz gerekecektir. Çevredeki betiği etkilemekten kaçınmak için bunu bir kapsam alt kabında yapabilirsiniz:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Veya ne mutlak bir yol ne de arşiv dosyasına göreli bir yol uygunsa, bunu arşivin kapsamını alt kabuğun dışında adlandırmak için de kullanabilirsiniz:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

veya GNU katran ile

tar xzf archive.tar.gz -C /destination

3
gzipKatranın sıkıştırılmış arşivleri anlamadığı durumlarda kullanma fikrini seviyorum .
Alfe

4

Özler myArchive.tar için / destinationDirectory

Komutlar:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

0

Sen kullanabilirsiniz için başka bir klasöre untar birden .tar.gz dosyalarını döngü. Aşağıdaki kod, / destination / folder / path komut dosyasına argüman olarak alınır ve / destination / folder / path içindeki geçerli konumda bulunan tüm .tar.gz dosyalarını açar.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
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.