macOSを使っています。zipファイルが沢山入っているフォルダがあります。AppleDoubleを削除する必要があります。スクリプトを組みたいのですが、教えてもらえますか。

macOSでZIPファイル内に含まれる AppleDouble(._ で始まる隠しファイル) を一括削除するには、標準の zip コマンドの削除オプション(-d)を利用したシェルスクリプトが効率的です。 

以下のスクリプトは、指定したフォルダ内のすべての .zip ファイルを走査し、内部の __MACOSX ディレクトリや ._ ファイルを削除します。

AppleDouble 削除用シェルスクリプト

bash

#!/bin/bash

# 対象のフォルダパスを指定(例: ~/Documents/zips)
TARGET_DIR="パスを入力してください"

# フォルダが存在するか確認
if [ ! -d "$TARGET_DIR" ]; then
  echo "Error: Directory $TARGET_DIR does not exist."
  exit 1
fi

# フォルダ内の全zipファイルに対してループ処理
find "$TARGET_DIR" -name "*.zip" -type f | while read -r zip_file; do
  echo "Processing: $zip_file"
  
  # zip内の AppleDouble 関連ファイルを削除
  # "__MACOSX/*" : リソースフォークが格納されるディレクトリ
  # "*/._*" : ファイル単位の AppleDouble ヘッダー
  zip -d "$zip_file" "__MACOSX/*" "*/._*" "._*" > /dev/null 2>&1
  
  if [ $? -eq 0 ]; then
    echo "  -> Cleaned successfully."
  else
    echo "  -> No AppleDouble files found or error occurred."
  fi
done

echo "Done."

使い方

  1. テキストエディタ(標準の「テキストエディット」や VS Code など)を開き、上記をコピー&ペーストします。
  2. TARGET_DIR="パスを入力してください" の部分を、実際のフォルダパス(例:"/Users/あなたの名前/Desktop/test")に書き換えます。
  3. clean_zip.sh という名前で保存します。
  4. ターミナルを開き、以下のコマンドで実行権限を与えて実行します。bashchmod +x clean_zip.sh ./clean_zip.sh コードは注意してご使用ください。

補足事項

  • AppleDoubleとは: macOS特有の「リソースフォーク(アイコン情報やメタデータ)」を、macOS以外のシステム(WindowsやLinux)でも保持するために生成される ._ から始まるヘッダーファイルのことです。
  • zip -d オプション: ZIPファイルを展開することなく、内部の特定のファイルのみを削除できるため、ファイル数が多い場合に非常に高速です。
  • 注意: スクリプトを実行する前に、念のためフォルダのバックアップを取っておくことをお勧めします。 

特定のフォルダではなく、デスクトップ上のすべてのZIPを対象にするなど、さらに絞り込みが必要な場合は教えてください。