Batch nén nhiều thư mục vào các tệp zip riêng lẻ


12

Tôi có hàng tá thư mục cần nén vào từng tệp zip.

Nếu tôi chọn tất cả các thư mục này trong Finder và thực hiện "Nén [X] Mục", tôi nhận được một tệp zip chứa tất cả các thư mục, trong khi thứ tôi muốn là một tệp zip cho mỗi thư mục.

Tôi đã thử tạo một quy trình làm việc với Automator bằng hành động "Tạo Lưu trữ", nhưng nó hoạt động theo cùng một cách: nhập nhiều tệp / thư mục xuất ra một tệp zip. Không có cách nào để xác định rằng hành động chạy trên từng mục riêng lẻ.

Về cơ bản, tôi đang tìm cách để tránh phải chạy "Nén" một cách tẻ nhạt trong Finder trên mỗi thư mục một lần. Có cách nào để tự động hóa điều này?


1
Tôi đã cập nhật câu trả lời của mình để cải thiện mã được sử dụng để tăng tên tệp lưu trữ zip để nó mô phỏng cách trình đơn ngữ cảnh Trình đơn nén [n] Lệnh Mục tăng tên tệp.
dùng3439894

Xin lỗi, tôi đã cập nhật mã một lần nữa để loại bỏ lỗi không cần thiết popdvà sửa một lỗi đánh máy nghiêm trọng for i in $bn*.zip; do, đáng lẽ phải có for i in $bn *.zip; do. Lưu ý khoảng trống giữa $bn*.zip, nó bị thiếu và không nên có. Vì vậy, xin vui lòng cập nhật nó trong triển khai của bạn nếu không nó bước vào File Name 2.zipkhi basenamecó một không gian trong đó.
dùng3439894

Câu trả lời:


14

Dưới đây là một dịch vụ Automator 1 mà trở nên có sẵn trong Finder khi Folders được lựa chọn và mô phỏng các ngữ cảnh menu Compress [n] Items lệnh ngoại trừ nó tạo ra một tập tin lưu trữ zip cá nhân cho mỗi lựa chọn thư mục trong tên của chọn thư mục . Nếu tệp Thư mục Name.zip đã tồn tại thì " 2"( không gian 2) sẽ được thêm vào tên tệp , ví dụ: Tên thư mục 2.zip . Điều này đảm bảo tệp lưu trữ zip hiện cókhông được chạm và tên tệp lưu trữ zip sẽ được tự động tăng lên khi cần thiết.

1 Trong hệ điều hành MacOS Mojave , và sau đó, một Automator Dịch vụ được gọi là một hành động nhanh . Ngoài ra còn có sự khác biệt về danh pháp nhỏ khác nhưng chúng nên rõ ràng hơn khi so sánh chúng với quy trình làm việc Mojave Automator trước macOS.

Để tạo dịch vụ: 1

  1. Mở Automator và chọn Service 1 hoặc File > New > Service Nếu Automator đã mở.

  2. Đặt dịch vụ nhận được lựa chọn để các thư mụctrong để Finder .

  3. Thêm hành động Run Shell Script , thiết lập Shell: to / bin / bashPass input: thành đối số và thêm sau đây :

    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. Lưu dịch vụ dưới dạng: Nén các thư mục riêng biệt

Để sử dụng Dịch vụ:

Trong Finder hoặc trên Desktop chọn nhiều thư mục , sau đó nhấn chuột phải và chọn Compress Folders riêng từ dưới Services .

Hoặc sau khi chọn Thư mục đích , bạn cũng có thể nhấp vào Trình tìm kiếm > Dịch vụ > Nén thư mục riêng biệt khỏi thanh menu .

Ở đó bạn có nó, một cách để nén nhiều thư mục riêng biệt và đồng thời cùng một lúc trong kho lưu trữ zip riêng lẻ trong khi mô phỏng cách Finder tạo tệp lưu trữ zip. Có nghĩa là kho lưu trữ zip chứa các nhánh tài nguyên được bảo tồn và dữ liệu meta HFS trong thư mục con __MACOSX và chỉ nhúng nguồn tên thư mục mẹ trong kho lưu trữ đích , không phải là tên đường dẫn đủ điều kiện như khi sử dụng zip(không có -j) để tạo tệp lưu trữ.

Hình ảnh của các thư mục nén riêng biệt

Nén thư mục riêng - Dịch vụ tự động


Tôi đã kiểm tra cả giải pháp của bạn và của @ ababak. Họ đưa ra chính xác cùng một kết quả và ababak dễ thực hiện hơn nhiều. Tôi đã bỏ phiếu cả hai dù thế nào.
turzifer

15

Có một giải pháp thay thế được tích hợp sẵn nếu bạn không muốn sử dụng Automator và ổn với việc thay đổi cài đặt của Utility Utility.

  1. Mở Utility Utility.app nằm trong / System / Library / CoreService / Application /
  2. Chuyển đến Tệp> Tùy chọn
  3. Thay đổi tùy chọn "Sử dụng định dạng lưu trữ" thành "Lưu trữ Zip"
  4. Kéo và thả các thư mục vào biểu tượng của nó trong thanh công cụ.

Điều thú vị về tùy chọn này là bạn có thể đặt tùy chọn Archive Utility.app để chuyển bản gốc sang thùng rác sau khi hoàn thành, nó không giới hạn trong các thư mục. Có cách nào để thiết lập dịch vụ Automator để mở với Archive Utility.app dưới dạng dịch vụ nếu bạn muốn nhấp chuột phải dưới dạng tùy chọn không? Tôi gặp phải một hạn chế là Archive Utility.app không thể được chọn bằng hành động Khởi chạy ứng dụng.
mở cửa

@thepen, tất nhiên bạn có thể chọn Lưu trữ tiện ích làm Hành động ứng dụng khởi chạy. Bạn chỉ cần chọn "Khác khác" và điều hướng đến vị trí của nó /System/Library/CoreServices/Applications/(bạn có thể nhấn Cmd-Shift-G khi hộp thoại chọn tệp được mở để dán đường dẫn này để điều hướng nhanh)
ababak

sự khác biệt giữa 'định dạng lưu trữ' và 'lưu trữ zip' là gì?
dùng1993

Phương pháp này là một luồng công việc dễ dàng hơn nhiều. Tôi đã thử lệnh: cho mục trong *; làm zip "$ {item} .zip" "$ {item}"; thực hiện trong thiết bị đầu cuối nhưng nó không hoạt động đúng. Không biết tại sao nhưng tôi không muốn dành thời gian để tìm hiểu. Điều này làm việc tốt.
ArchonOSX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.