Membuat arsip tar tanpa menyertakan direktori induk saat file disimpan di direktori yang berbeda

11

Saya memiliki empat file berikut dalam sistem file:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Saya perlu memasukkan file-file itu ke arsip tar, tetapi saya tidak ingin menambahkan direktori. Yang terbaik yang bisa saya dapatkan adalah:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Ini masih belum sempurna, karena setiap file dalam arsip memiliki dua direktori yang dalam. Apakah ada cara yang lebih baik? Atau apakah saya hanya perlu menyalin s1, s2, r3dan r5file ke dalam satu direktori dan membuat arsip dengan tar -czvf archive.tgz s1 s2 r3 r5?

Martin
sumber

Jawaban:

17

Anda dapat menggunakan -Cbeberapa kali (berpindah dari satu direktori ke direktori lain):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Perhatikan bahwa setiap -Copsi ditafsirkan relatif terhadap direktori saat ini pada titik itu (atau Anda bisa menggunakan jalur absolut).

Stephen Kitt
sumber
11

Jika Anda memiliki daftar file dalam file, atau dapat menghasilkannya menggunakan perintah, Anda dapat menggunakan perintah tar GNU tunggal:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

Transformasi masih menyimpan direktori, tetapi meratakan tata letak sepenuhnya. Jadi Anda perlu beberapa cara untuk memfilter direktori, maka perlu daftar file.

muru
sumber
8

Anda dapat menambahkan file ke arsip satu per satu:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Anda bisa membuat skrip ini untuk membuatnya lebih mudah: untuk setiap jalur, jalankan tar rfdengan direktori basis sebagai nilai untuk -Cparameter dan nama file dasar tanpa jalur untuk ditambahkan.

janos
sumber