Buat direktori target saat mengekstraksi tarball

25

Apakah mungkin untuk membuat direktori target, mirip dengan mkdir -p, di mana saya dapat mendefinisikan direktori target yang tidak ada dalam perintah tar saya, dan tar akan membuat direktori untuk saya?

Saya tahu saya bisa mengarahkan output ke direktori menggunakan tar -C /target/dir, tetapi ini tidak berfungsi jika direktori target tidak ada.

wulfgarpro
sumber
4
Jika tidak memungkinkan, Anda selalu dapat membuat alias shell.
n0pe

Jawaban:

38
mkdir -p /target/dir && tar -C /target/dir
V untuk V
sumber
3
Tanpa spoonfeeding, lurus dan to the point.
Amado Martinez
10
Minor menyarankan perubahan:mkdir -p /target/dir && tar -C $_
Mark Melville
@MarkMelville menjelaskan kepada kami apa yang seharusnya $ _dikatakan di sini
Suhayb
@ Suhayb $_adalah parameter khusus di Bash yang memperluas argumen terakhir ke perintah sebelumnya.
ConceptRat
13
tar -xvf bash.html_node.tar.gz --one-top-level

Dari halaman manual dari perintah tar

--one-top-level[=DIR]

    Ekstrak semua file ke DIR , atau, jika digunakan tanpa argumen, ke dalam subdirektori bernama nama dasar arsip (dikurangi sufiks kompresi standar yang dikenali oleh --auto-compress).

----- uji

tes 1

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

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

// jika nama tgz sama dengan root_dir dari arsip, tidak ada efek lain

tes 2

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

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

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

// jika nama tgz tidak sama dengan root_dir dari arsip, buat direktori tingkat atas

Alaa Ahmad M. Zakaria
sumber
3
Membutuhkan GNU tar? Tar bsd default Mac tidak memiliki opsi ini.
Curtis Yallop
1
Ya, ini harus disebutkan lebih jelas.
kcrisman
5

Ini lebih masuk akal bagi saya: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirmembuat folder meskipun saya tidak begitu mengerti -psaklar. &&memungkinkan Anda menjalankan perintah kedua. Saya menggunakan switch tar yang khas tetapi pada akhirnya -Cdigunakan untuk mengubah direktori dan mengekstrak ke lokasi yang diperlukan.

referensi: ekstrak-file-yang terkandung di dalam arsip-tar-gz-ke-direktori-baru-bernama-arsip

Gr4cchus
sumber
2
Switch -p tidak akan membuat kesalahan jika direktori sudah ada.
David
@Dvid juga akan membuat direktori terkemuka yang tidak ada, yaitu akan dibuat /createjika tidak ada.
Antonio Pérez
1

Jika Anda tidak tahu jalur yang harus dibuat ...
Dapatkan jalur yang diperlukan dari file tar, lalu buat jalur ...

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
ckroger
sumber