私の最終的な解決策:
次のスクリプト (damienfrancois の回答から変更) を「photos.sh」などのファイルに保存します。
IFS=$'\n';
for file in $(find ./ -name '*.jpg' -or -name '*.JPG' -or -name '*.tif' -or -name '*.JPEG'); # iterate over each file
do
taglist="$(tag --no-name --list "$file")" # get a comma-separated list (string) of tags
IFS=',' read -ra tagarray <<< "$taglist" # convert that string to an array
for tag in "${tagarray[@]}" # loop over that array of tags
do
exiftool -Keywords+="$tag" "$file" # add tag to file
done
done
次のようにして、スクリプトを実行可能にすることを忘れないでください
chmod 755 /path/to/script/dir/photos.sh
「Tag by JDBerry」をインストールし、「ExifTool by Phil Harvey」もインストールします。ターミナルを使用して、選択したディレクトリに移動します。このディレクトリには、「.jpg」、「.JPG」、「.tif」、および「.JPEG」ファイルのみを含める必要があります。スクリプトはルート ディレクトリを再帰的に繰り返しますが、他のファイル タイプは変更しません。成功した出力は次のようになります。
~ > cd /path/to/images/dir/
/path/to/images/dir/ > /path/to/script/dir/photos.sh
1 image files updated
1 image files updated
スクリプトは、元のファイルのコピーを「img.jpg_original」として保持します。すべての Apple タグは、最終ファイル「img.jpg」から削除されます。すべてが機能したことを確認したら、「_original」ファイルを忘れずに削除してください (私は Spotlight を使用しました)。
私の元の質問:
私は rysnc や ssh などのタスクに OS X のターミナルを頻繁に使用しますが、まだ bash スクリプトの完全な初心者です。クライアントには、OS X タグを使用してタグ付けされた大量の画像があります。これらのタグを IPTC メタデータに追加する必要があります。
これまでのところ、「Tag by JDBerry」を使用して次のことができました。
~ > tag --no-name --list /path/to/img/example.jpg
Orange,Red
Phil Harvey による ExifTool を使用して、次のことも実行できました。
~ > exiftool -Keywords+='Orange' /path/to/img/example.jpg
1 image files updated
~ > exiftool -Keywords+='Red' /path/to/img/example.jpg
1 image files updated
喜んで私を助けてくれる Bash Scripting の専門家はいますか? 私は次のようなことを考えていました(疑似コードで書かれています):
$imgDir[] = function that adds all images in directory to array;
foreach ($imgDir as $pathToImg) {
$tagsArray[] = function that executes "tag --no-name --list $pathToImg" and saves return value;
$numberOfTags = count($tagsArray);
if ($numberOfTags != NULL) {
for ($i = 1; $i <= $numberOfTags; $i++) {
function that executes "exiftool -Keywords+='$tagsArray[$i-1]' $pathToImg;"
}
}
}