Bagaimana saya bisa membuat file .zip untuk setiap folder dalam folder lain?

16

Di bawah folder images\, saya memiliki folder berikut:

  • Usa\
  • Italy\
  • Japan\

dll ..

Saya ingin script yang menciptakan .zipuntuk masing-masing folder tersebut, jadi saya memiliki usa.zip, italy.zip, japan.zip.

Bagaimana saya bisa melakukan itu?

Juan Claude
sumber

Jawaban:

9

Saya menganggap ini adalah Windows, karena Anda menggunakan garis miring terbalik.

Dapatkan 7za.exe (versi baris perintah 7-zip ) dan letakkan di file Anda %PATH%.

Kemudian jalankan ini di dalam Images\direktori Anda :

for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"

Atau dalam skrip batch:

for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"
paradroid
sumber
Ini tidak berfungsi jika folder memiliki spasi dalam namanya.
jiggunjer
@ jiggunjer Ya, Anda benar. Saya telah memperbaikinya untuk bekerja dengan spasi di nama folder.
paradroid
1
Ini bekerja bahkan dengan executable 7zip yang normal. Saya memperbarui 7za ke "C: \ Program Files \ 7-Zip \ 7z.exe" dan berhasil tanpa masalah.
user1324161
7

Anda dapat menggunakan Winrar untuk ini.

Pilih semua folder Anda, klik kanan dan pilih Add to archive. Sekarang pilih opsi di Put each file to separate archivebawah tab Files:

masukkan deskripsi gambar di sini

Klik OK dan Anda selesai. Jika Anda ingin file zip bukan .rar, cukup pilih ZIPpada Generaltab di bawah Archive format.

nmat
sumber
7

Anggap Anda menggunakan Linux, Anda dapat menggunakan skrip Bash seperti ini:

  #!/bin/bash

  IFS=$'\n'

  for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
    zip -r "$f" "$f"
  done

Script ini akan mengambil argumen pertama sebagai folder, dalam hal ini gambar, dan mengulangi persis satu tingkat dalam untuk mendapatkan semua folder Anda (Amerika Serikat, Italia, dan Jepang) dan zip mereka di tempat yang sama.

Itu tidak akan menghapus file zip lama atau folder sumber. Zip cukup pintar untuk mendeteksi file zip yang ada dan memperbaruinya ketika dijalankan lagi. Namun, jika Anda menghapus file di folder sumber itu tidak akan dihapus dalam file zip. Anda mungkin menghindari perilaku ini dengan menghapus file yang ada sebelumnya.

Robert Kühne
sumber
Saya menggunakan skrip Linux yang diposkan sponiro, dan menambahkan baris di awal untuk menghapus folder: cari $ 1 -jenis d | xargs rm -rf
genevish
0

Jawaban ini oleh MVG bekerja untuk saya pada Ubuntu:

Anda dapat menggunakan loop ini di bash :

for i in */; do zip -r "${i%/}.zip" "$i"; done

iadalah nama dari variabel loop. */berarti setiap subdirektori dari direktori saat ini, dan akan menyertakan garis miring di nama-nama tersebut. Pastikan Andacd ke tempat yang tepat sebelum menjalankan ini. "$i"cukup beri nama direktori itu, termasuk trailing slash. Tanda kutip memastikan bahwa spasi putih dalam nama direktori tidak akan menyebabkan masalah. ${i%/}seperti $itetapi dengan garis miring dihapus, sehingga Anda dapat menggunakannya untuk membangun nama file zip.

Jika Anda ingin melihat cara kerjanya, sertakan echosebelum zip dan Anda akan melihat perintah yang dicetak bukannya dieksekusi.

Franck Dernoncourt
sumber