Bagaimana cara membuat direktori dalam file zip relatif ke direktori target daripada direktori kerja saya

25

Saya memanggil perintah zip dari skrip di mana saya tidak dapat mengubah direktori. Saya perlu membuat file zip dari barang-barang data/kit123/dari direktori tempat data berada, tapi saya ingin isi zip hanya menjadi isi kit123, dengan path relatif ke kit123.

Ini adalah struktur direktori

myworkingdir
    data
        kit123
            kitpart1
                file.xcf
                anotherfile.xcf
            kitpart2
                ...
        kit124
            ...

Skrip saya berjalan di myworkingdir dan tidak dapat mengubah direktori.

Jika saya menelpon

zip -r kit123.zip data/kit123

maka struktur dalam file zip akan menjadi

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

tapi aku menginginkannya

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Apakah ada opsi zip yang bisa saya gunakan untuk mencapai ini? Tampaknya aneh bahwa itu harus bergantung pada direktori kerja saya

Saya tahu itu bukan -j. yang satu menghancurkan struktur di dalam kit123

Nathan
sumber
Bah, tidak masalah saya menemukan cara mengubah dir (dengan Python) Saya hanya memiliki izin yang tidak terorganisir dengan baik. Saya masih ingin tahu apakah zip memiliki opsi seperti itu.
Nathan
Python zipfile.write(arcname=mengizinkannya btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

18

Seperti yang Anda catat di komentar yang sekarang Anda tahu cara mengganti direktori dengan skrip Anda, saya akan menjelaskan situasi dengan zip terkait jalur relatif.

Hal ini mungkin paling mudah untuk membuka terminal dan cduntuk kit123; Anda harus membuat direktori target direktori kerja Anda - Anda tidak dapat menjalankan perintah dari dasar direktori home Anda atau itu akan mengambil semua jalur /home/$USER/..Jika Anda menggunakan -jopsi, itu akan menghapus semua jalur, karena tidak ada benar-benar setara dengan opsi tar --stripdengan berbagai tingkat penghapusan jalur dapat ditentukan.

Jadi tolong cd ke direktori target Anda ( kit123) dan masukkan:

zip -r kit123.zip *

Ini akan secara rekursif ( -r) menyimpan semua ( *) file dan direktori file dalam direktori saat ini ( kit123), dan ketika path relatif ( -p) disimpan secara otomatis kecuali jika ada -jopsi, struktur direktori akan seperti yang Anda inginkan. Kit123dan subfolder ( kitpart1) dengan file mereka sendiri akan ada:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Anda dapat memeriksa isi file zip dengan unzip -l zipfile.zip.

Untuk informasi lebih lanjut tentang opsi lain yang tersedia untuk zip, lihat man zipdan manual Ubuntu online .


sumber