3

私の最終的な解決策:

次のスクリプト (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;"
        } 
    }
}
4

3 に答える 3

0

これは上記の回答で変更されました

わかりました、これが詳細を知りたい Mac ユーザーのために機能するようにした方法です。

次のスクリプト (damienfrancois の回答から変更) を「photos.sh」などのファイルに保存します。

for file in *.jpg # 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

https://github.com/jdberry/tag/から Tag をインストールし、 http://www.sno.phy.queensu.ca/~phil/exiftool/から ExifTool もインストールします。ターミナルを使用して、選択したディレクトリに移動します。このディレクトリには「.jpg」ファイルのみを含める必要があります。スクリプトは再帰的に反復したり、他のファイル タイプを変更したりしません。成功した出力は次のようになります。

~ > 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」から削除されます。すべてが機能したことを確認したら、「元の」ファイルを削除することを忘れないでください (私は Spotlight を使用しました)。

于 2015-06-08T09:33:31.460 に答える