Katakanlah saya memiliki nama file ugly_name.tar
, yang ketika diekstraksi, menjadi ugly_name
direktori. Perintah apa yang bisa saya gunakan sehingga nama direktori yang dihasilkan adalah pretty_name
sebaliknya?
125
Ini seharusnya bekerja:
mkdir pretty_name && tar xf ugly_name.tar -C pretty_name --strip-components 1
-C
perubahan ke direktori yang ditentukan sebelum membongkar (atau mengemas). --strip-components
menghapus jumlah direktori yang ditentukan dari nama file yang disimpan dalam arsip.
Perhatikan bahwa ini tidak benar-benar portabel. GNU tar dan setidaknya beberapa tars BSD memiliki --strip-components
opsi, tetapi tampaknya tidak ada pada platform mirip-unix lainnya.
Cara bodoh melakukan ini akan bekerja cukup banyak di mana-mana.
tar xf ugly_name.tar && mv ugly_name pretty_name
tar -xvf /tmp/backupfiles.tar -C /var/www/
mv ugly-* pretty_name
ugly_name
direktori. Ngomong-ngomong, kecantikan ada di mata yang melihatnya.Dengan tar GNU ≥1.16, gunakan
--transform
untuk menerapkan transformasi sed regexp ke setiap nama file (transformasi diterapkan pada path lengkap dalam arsip):Jika
ugly_name
komponen tingkat atas dari semua nama file dalam arsip, Anda tidak perlu repot dengan pencocokan tepat:Jika Anda tidak tahu nama direktori tingkat atas, Anda masih dapat menggunakan metode ini, meskipun Anda mungkin lebih suka
--strip-components
.Dengan
pax
, utilitas arsip POSIX, gunakan-s
opsi, yang menggunakan ekspresi pengganti seperti sed sebagai argumen.sumber
Gunakan ini :
sumber
&&
operator daftar di antara dua perintah itu, jadi yang kedua hanya dijalankan jika yang pertama berhasil.ugly_name
sudah ada.Cara paling sederhana
sumber
--one-top-level=pretty_name
tanpa--strip-components 1
. (2) Sebaliknya, jawaban yang diterima (diposting oleh Mat) fitur--strip-components 1
tanpa--one-top-level=pretty_name
. (3) Dapatkah Anda menjelaskan mengapa jawaban Anda, menggabungkan pilihan-pilihan ini, lebih baik daripada yang sebelumnya? Tolong jangan menanggapi dalam komentar; edit jawaban Anda untuk membuatnya lebih jelas dan lebih lengkap.--strip-component 1
diperlukan, dengan metodemkdir
atau--strip-components 1
, jika tidak, Anda hanya mendapatkannyapretty_name/ugly_name/
.Dari askUbuntu, jawaban ini berhasil untuk saya:
Memperbarui
Seperti yang ditunjukkan dalam komentar , metode ini tidak berfungsi untuk arsip yang dibentuk dengan benar, namun seperti yang ditunjukkan oleh jawaban lain , Anda harus menambahkan
--strip-components 1
ini agar benar-benar berfungsi. Saya telah menguji dengan opsi baru ini dan itu berfungsi baik untuk arsip dengan nama tingkat atas dan yang tidak.sumber
pretty_name
, dengan direktori tingkat atas asli di dalamnya. Misalnya jikatar xzf ugly_name.tgz
akan membuat direktori bernamaugly_name/
, maka perintah yang Anda berikan akan dibuatpretty_name/ugly_name/
.