Kompres banyak folder menjadi beberapa file zip

12

Saya memiliki banyak folder yang harus saya kompres menjadi file zip individual.

Jika saya memilih semua folder ini di Finder dan melakukan "Compress [X] Items," Saya mendapatkan satu file zip yang berisi semua folder, sedangkan yang saya inginkan adalah satu file zip per folder.

Saya mencoba membuat alur kerja dengan Automator menggunakan tindakan "Buat Arsip", tetapi berperilaku dengan cara yang sama: memasukkan beberapa file / folder menghasilkan file zip tunggal. Tidak ada cara untuk menentukan bahwa tindakan dijalankan pada setiap item secara individual.

Pada dasarnya, saya mencari cara untuk menghindari keharusan menjalankan "Kompres" di Finder pada setiap folder satu per satu. Apakah ada cara untuk mengotomatisasi ini?

daGUY
sumber
1
Saya memperbarui jawaban saya untuk meningkatkan kode yang digunakan untuk menambah nama file arsip zip sehingga mengemulasi bagaimana menu konteks Finder Kompres [n] Perintah item menambah nama file.
user3439894
Maaf, saya memperbarui kode sekali lagi untuk menghapus popdkesalahan ketik yang tidak perlu dan memperbaiki for i in $bn*.zip; do, yang seharusnya for i in $bn *.zip; do. Perhatikan ruang antara $bndan *.zip, itu hilang dan seharusnya tidak ada. Jadi tolong perbarui dalam implementasi Anda jika tidak langkah File Name 2.zipketika basenamememiliki ruang di dalamnya.
user3439894

Jawaban:

14

Berikut adalah layanan Automator 1 yang menjadi tersedia di Finder ketika Folder dipilih dan mengemulasi yang konteks-menu Compress [n] Item perintah kecuali menciptakan sebuah file zip arsip individual untuk masing-masing dipilih Folder di nama dari yang dipilih Folder . Jika file Folder Name.zip sudah ada maka " 2"( spasi 2) ditambahkan ke nama file , misalnya Folder Name 2.zip . Ini memastikan file arsip zip yang adatidak disentuh dan nama file arsip zip akan secara otomatis ditambahkan sesuai kebutuhan.

1 Di macOS Mojave , dan kemudian, Layanan Automator disebut Tindakan Cepat . Ada juga perbedaan nomenklatur kecil lainnya tetapi mereka harus lebih jelas ketika membandingkannya dengan alur kerja Mojave Automator pra-macOS.

Untuk Membuat Layanan: 1

  1. Buka Automator dan pilih Layanan 1 atau File > Baru > Layanan Jika Automator sudah terbuka.

  2. Set layanan yang diterima yang dipilih untuk folder dan di ke Finder .

  3. Tambahkan Script Run Shell Aksi , pengaturan Shell: untuk / bin / bash dan Lulus masukan: untuk sebagai argumen dan tambahkan berikut kode :

    for f in "$@"; do
    
        dn="$(dirname "$f")"
        bn="$(basename "$f")"
    
        cd "$dn" || exit
    
        if [[ ! -e "$bn.zip" ]]; then
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip"
        else
            n=2
            for i in $bn *.zip; do
                if [[ "$bn $n.zip" == "$i" ]]; then
                    n="$(( n + 1 ))"
                fi
            done
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip"
        fi
    
    done
    
    afplay /System/Library/Sounds/Purr.aiff
    
  4. Simpan Layanan sebagai: Folder Kompres Secara Terpisah

Untuk Menggunakan Layanan:

Di Finder atau di Desktop pilih beberapa Folder , lalu klik kanan dan pilih Folder Kompres secara terpisah dari bawah Layanan .

Atau setelah memilih Folder target , Anda juga dapat mengklik Finder > Layanan > Folder Kompres Secara terpisah dari bilah menu .

Di sana Anda memilikinya, cara untuk kompres beberapa folder secara terpisah dan bersamaan pada satu waktu di arsip zip individu sambil meniru bagaimana Finder menciptakan file arsip zip. Berarti arsip zip berisi garpu sumber daya yang diawetkan dan meta-data HFS dalam subdirektori __MACOSX dan hanya menyematkan sumber nama direktori induk dalam arsip tujuan , bukan pathname yang sepenuhnya memenuhi syarat seperti saat menggunakan zip(tanpa -j) untuk membuat arsip.

Gambar Map Kompres Secara Terpisah

Folder Kompres Secara Terpisah - Layanan Automator

pengguna3439894
sumber
Saya memeriksa solusi Anda dan @ ababak. Mereka memberikan hasil yang persis sama dan ababak jauh lebih mudah diimplementasikan. Saya memilih keduanya.
turzifer
15

Ada solusi alternatif yang terintegrasi jika Anda tidak ingin menggunakan Automator dan tidak masalah dengan mengubah pengaturan Archive Utility.

  1. Buka Archive Utility.app yang terletak di / System / Library / CoreServices / Applications /
  2. Buka File> Preferensi
  3. Ubah preferensi "Gunakan Format Arsip" menjadi "Arsip Zip"
  4. Seret dan jatuhkan folder ke ikonnya di dok.
ababak
sumber
Yang menyenangkan tentang opsi ini adalah Anda dapat mengatur preferensi Archive Utility.app untuk memindahkan yang asli ke sampah setelah selesai, itu tidak terbatas pada folder. Apakah ada cara untuk mengatur layanan Automator agar terbuka dengan Archive Utility.app sebagai layanan jika Anda ingin mengklik kanan sebagai opsi? Saya mengalami keterbatasan karena Archive Utility.app tidak dapat dipilih menggunakan tindakan Launch Application.
lalu
@thepen, tentu saja Anda dapat memilih Archive Utility sebagai Launch Application Action. Anda hanya perlu memilih "Lainnya ..." dan menavigasi ke lokasinya yang /System/Library/CoreServices/Applications/(Anda dapat menekan Cmd-Shift-G ketika dialog pilih file terbuka untuk menempelkan jalur ini untuk navigasi cepat)
ababak
apa perbedaan antara 'format arsip' dan 'arsip zip'?
user1993
Metode ini adalah alur kerja yang jauh lebih mudah. Saya mencoba perintah: untuk item dalam *; lakukan zip "$ {item} .zip" "$ {item}"; dilakukan di terminal tetapi tidak berfungsi dengan baik. Tidak diketahui mengapa, tetapi saya tidak ingin meluangkan waktu untuk mencari tahu. Ini bekerja dengan baik.
ArchonOSX