Saya sedang .tar
memasukkan beberapa file dengan path example/super_user/Output.*
.
Hasilnya .tar
terlihat seperti ini:
+ example
+ super_user
- Output.zip
- Output.xml
- Output.txt
Tapi saya ingin file seperti berikut:
- Output.zip
- Output.xml
- Output.txt
Apakah Anda tahu bagaimana saya bisa mencapai ini ketika masih berada di direktori lain?
unix
compression
tar
Der Hochstapler
sumber
sumber
Jawaban:
tar akan mempertahankan struktur file dan folder jadi saya tidak berpikir ada cara untuk menginstruksikan tar untuk meratakan hierarki pada waktu pembuatan.
Salah satu solusinya adalah untuk sementara mengubah direktori, membuat tar, lalu kembali - contoh cepat di bawah ini:
sumber
Jika direktori 'example' adalah akar dari filesystem, berikut cara lain:
ini akan mengubah direktori ke titik yang ingin Anda lakukan tar. Peringatannya adalah jika ada subdirektori di bawah / example / super_user, struktur direktori akan dipertahankan untuk sub-direktori ini.
sumber
/home/u/foo/bar
, direktori kerja/home/b
, kemudiantar -C foo/bar -cvf qiz.tar .
bekerja dengan baik. Satu peringatan, adalah bahwa Anda tidak dapat menggunakan wildcard, yaitutar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
atautar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
tidak akan berfungsi.-C
beberapa kali dalam satutar
perintah jika Anda perlu menambahkan beberapa file yang tersebar di beberapa direktori tetapi masih ingin file tar menjadi datar.Saya sudah mengirimkan jawaban saya di sini:
https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure
repost (untuk ppl malas)
Ini jelek ... tapi berhasil ...
Saya memiliki masalah yang sama tetapi dengan beberapa folder, saya hanya ingin menyingkat setiap file. Anda dapat menggunakan opsi "transform" untuk memberikan ekspresi sed dan ... ini berfungsi seperti yang diharapkan.
inilah ungkapan:
's/.*\///g'
(hapus semuanya sebelum '/')Ini adalah perintah terakhir:
sumber
Untuk membuat tar (ARCHIVE.tar) dengan semua file dari direktori (DIR), tanpa informasi direktori induk (bahkan tidak ./), Anda dapat menggunakan sesuatu seperti:
Anda dapat bermain dengan find untuk membatasi kedalaman, memilih file tertentu, dan banyak hal lainnya.
Semoga berhasil!
sumber
-printf
adalah perintah yang tidak standar. Banyak dari mereka hanya bekerja dengan versi spesifik dari find. Biasanya kami menandai mereka ketika menjawab pertanyaan tentang Pengguna Super (misalnya dengan "-blah adalah ekstensi Gnu dan tidak akan bekerja di mana-mana").Saya membuat direktori temp. Dan dalam direktori, dibuat tautan simbolis ke semua file ke file yang akan disertakan. Lalu aku melakukan tar-h -C. sehingga semua file (bukan tautan, tetapi kontennya) dimasukkan dalam arsip dengan nama yang diinginkan.
sumber
Jika itu adalah seluruh isi tarball maka Anda dapat menggunakan
--strip-components
opsi tar GNU untuk menghapus 2 level sebelum file.sumber
--strip-path
tetapi menggunakannya tidak akan mengubah apa pun.Cara lain untuk mengubah direktori sementara adalah untuk menempatkan
cd
dantar
perintah dalam kurung(
)
:Keuntungan dari ini, adalah, Anda akan selalu secara implisit kembali ke direktori asli ketika blok selesai. yaitu tidak perlu
pushd
..popd
blok atau melacak ke mana haruscd
kembali ke.sumber
pushd mendorong jalur direktori saat ini ke
DIR
tumpukan dan pindah ke folder konten. Kemudian, Anda kembali ke direktori asli dengan menggunakanpopd
.sumber