複数のフォルダーを個別のzipファイルにバッチ圧縮


12

個別のzipファイルに圧縮する必要があるフォルダーが数十あります。

Finderでこれらのフォルダをすべて選択して「[X]アイテムを圧縮」すると、すべてのフォルダを含む1つのzipファイルが得られますが、必要なのはフォルダごとに1つのzipファイルです。

「アーカイブの作成」アクションを使用してAutomatorでワークフローを作成してみましたが、動作は同じです。複数のファイル/フォルダーを入力すると、単一のzipファイルが出力されます。アクションが各アイテムで個別に実行されるように指定する方法はありません。

基本的に、Finderで一度に1つずつフォルダごとに「圧縮」を実行する手間を省く方法を探しています。これを自動化する方法はありますか?


1
答えを更新して、zipアーカイブのファイル名をインクリメントするために使用するコードを改善し、Finderコンテキストメニューの[[n]アイテムを圧縮]コマンドがファイル名をインクリメントする方法をエミュレートするようにしました。
user3439894

申し訳ありませんが、私は不要なを削除するには、もう一度コードを更新popdし、中に致命的なタイプミス修正for i in $bn*.zip; doされている必要があります、for i in $bn *.zip; do$bnとの間のスペースに注意してください*.zip。それは欠落しており、そうなってはいけません。実装で更新してください。更新しない場合は、スペースが含まれているFile Name 2.zip場合に更新されますbasename
user3439894

回答:


14

ここでAutomatorのサービス1で使用可能になったファインダーときフォルダが選択され、エミュレートし、コンテキスト・メニューの [n]の項目は、圧縮を コマンド 以外は、作成した個々のzipアーカイブファイルごとに選択のためのフォルダ名前選択のフォルダをFolder Name.zipファイルがすでに存在する場合は、ファイル名" 2"スペース 2)が追加されます(例:Folder Name 2.zip)。これにより、既存のzipアーカイブファイルが保証されますは変更されず、zipアーカイブのファイル名は必要に応じて自動的に増分されます。

1ではMacOSのモハーベ、以降、Automatorの サービスが呼び出されたクイックアクション。他にも小さな命名法の違いがありますが、macOS以前のMojave Automatorワークフローと比較すると、より明確になるはずです。

サービスを作成するには:1

  1. Automatorを開き、Service 1またはFile > New > Service Automatorがすでに開いている場合に選択します。

  2. 設定サービスは、選択受信フォルダファインダー

  3. 追加の実行シェルスクリプト のアクションを設定し、:シェル/ binに/ bashの:パス入力引数として、次の追加のコードを

    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. 名前を付けてサービスを保存:フォルダーを個別に圧縮

サービスを利用するには:

ではファインダーまたは上のデスクトップ複数選択フォルダを、その後、右クリックして選択圧縮フォルダを別々に下からサービス

またはターゲット選択した後にフォルダを、あなたもクリックできるのFinder > サービス > 圧縮フォルダを別々にからメニューバー

そこで、Finderがzipアーカイブファイルを作成する方法をエミュレートしながら、個々のzipアーカイブで複数のフォルダーを個別かつ同時に一度に圧縮する方法があります。zipアーカイブは、サブディレクトリ__MACOSXに保存されたリソースフォークとHFSメタデータを含み、アーカイブの作成に(なしで)を使用する場合の完全修飾パス名ではなく、親ディレクトリ名のソースのみをdestination-archiveに埋め込みます。zip-j

個別にフォルダを圧縮するイメージ

フォルダを個別に圧縮する-Automatorサービス


私はあなたの解決策と@ababakの両方をチェックしました。まったく同じ結果が得られ、ababakの実装ははるかに簡単です。とにかく両方に賛成票を投じました。
turzifer

15

Automatorを使用したくない場合に組み込みであり、Archive Utilityの設定を変更しても問題ない代替ソリューションがあります。

  1. / System / Library / CoreServices / Applications /にあるArchive Utility.appを開きます
  2. [ファイル]> [設定]に移動します
  3. [アーカイブ形式を使用]設定を[Zipアーカイブ]に変更します
  4. フォルダーをドックのアイコンにドラッグアンドドロップします。

このオプションの良い点は、Archive Utility.appの設定を行って、完了後にオリジナルをゴミ箱に移動できることです。フォルダに限定されません。オプションとして右クリックしたい場合、AutomatorサービスをサービスとしてArchive Utility.appで開くように設定する方法はありますか?アプリケーションの起動アクションを使用してArchive Utility.appを選択できないため、制限に遭遇しました。
thepen

@thepen、もちろん、アプリケーションの起動アクションとしてアーカイブユーティリティを選択できます。「その他...」を選択し、その場所に移動する必要があります/System/Library/CoreServices/Applications/(ファイル選択ダイアログが開いているときにCmd-Shift-Gを押して、このパスを貼り付けてクイックナビゲーションすることができます)
ababak

「アーカイブ形式」と「zipアーカイブ」の違いは何ですか?
user1993

この方法は、はるかに簡単なワークフローです。私はコマンドを試しました:*のアイテム zip "$ {item} .zip" "$ {item}"を実行します。ターミナルで行われましたが、正しく機能しませんでした。理由は不明ですが、理解するのに時間をかけたくありませんでした。これはうまくいきました。
ArchonOSX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.