Zip secara rekursif semua file dalam direktori menjadi file zip individual ... tetapi dalam direktori terpisah


1

Pertanyaan serupa telah diajukan, tetapi saya tidak dapat menemukan apa yang saya cari. Pada dasarnya, saya memiliki direktori besar dengan subdirektori dan banyak file, dan saya ingin masuk ke setiap direktori dan subdirektori secara rekursif, dan zip setiap file secara individual. Saya menemukan solusi ini, tetapi itu tidak seperti yang saya inginkan:

find . -type f -execdir zip '{}.zip' '{}' \;

Sumber

Ini menampilkan file zip ke direktori asalnya. Namun, saya ingin file zip dalam direktori yang benar-benar terpisah, tetapi dengan struktur direktori yang sama, hanya dengan file zip yang dihasilkan. Adakah yang bisa membantu dengan ini?


Anda dapat cp -r direktori yang berisi semua direktori dan file di suatu tempat. Kemudian Anda menghapus semua file non-zip menggunakan find lagi, misalnya: find. -type f! -nama '* .zip' -hapus yang saya temukan di sini unix.stackexchange.com/a/78378
NanoPish

Saya punya BANYAK file, jadi saya lebih suka melakukan ini dalam operasi sesedikit mungkin. Kalau tidak, saya hanya akan melakukan itu.
AnthonyWeston

Jawaban:


1

Anda dapat pra-pend jalur relatif ke lokasi file zip sebagai:

find . -type f -exec zip -D '../zipdir/{}.zip' '{}' \; 

Jika perlu, untuk membuat struktur direktori yang dapat Anda lakukan:

find . -type d -exec mkdir -p '../zipdir/{}' \;

Ketika saya mencoba melakukan ini, itu memberi saya kesalahan: zip I / O error: Tidak ada file seperti itu atau direktori zip error: Tidak dapat membuat file output (../test1_zipped/./file.zip)
AnthonyWeston

Jadi saya mencoba membuat direktori tingkat atas untuk output (test1_zipped /), dan zip setiap file di direktori tingkat atas yang saya zip, tetapi tidak ada file di sub-direktori. Apakah saya perlu membuat kembali seluruh struktur direktori di direktori keluaran dengan solusi ini? Apakah ada cara otomatis untuk melakukan itu?
AnthonyWeston

0

Jika Anda belum menikah dengan file zip, Anda bisa membuat gambar squashfs dari seluruh pohon direktori yang dipertanyakan yang dapat dipasang juga (tidak ada pembukaan & cari di file zip tertentu untuk melihat apa yang ada di sana). Ini mungkin memiliki kompresi yang lebih baik juga, karena melihat seluruh pohon bersama-sama, lebih seperti arsip "padat", daripada banyak file zip individu.

Pada dasarnya Anda hanya perlu squashfs-toolspaket (itu namanya di Debian / Ubuntu, mungkin nama yang berbeda di keluarga linux yang berbeda), lalu:

mksquashfs /some/directory  archive.squashfs

dan untuk me-mount / melihat / menelusuri:

mount archive.squashfs /mnt/mountpoint -t squashfs

flag -t bahkan mungkin opsional, mount sangat bagus untuk secara otomatis menentukan tipe. Seharusnya tidak perlu -o loopbendera juga, tetapi coba kalau-kalau diperlukan.

Lihat http://tldp.org/HOWTO/SquashFS-HOWTO/creatingandusing.html atau cari saja cara menggunakan squashfs .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.