MacOSで異なる拡張子を持つファイルの同期

MacOSで異なる拡張子を持つファイルの同期

写真を撮影した後は、JPG(ファイル*.jpg)とRAW(ファイル*.CR2)という2つのフォルダが作成されます。通常JPGフォルダを見て、気に入らないものは削除します。

私が望むのは、次のことを確認するbashスクリプトを作成することです。

 for file.cr2 in folder.getFiles
   if file.jpg is NOT in folder2.getfiles 
      delete file.cr2

私はrsyncのいくつかの例を見ましたが、ファイルの拡張子が同じで、bashがうまくいかず、Cで行うことができますが、学びたいと思います。

答え1

この試み:

for file in cr2files/*; do
   test=”jpgfiles/$(basename ${file:: -3})jpg”
   if [ ! –f “$test” ]; then
      echo “$file”
   fi
done

必要な結果が得られたら、echo "$file" - 行を - rm "$file" - に置き換えることができます。 test="jpgfiles/$(basename ${file:: -3])jpg" 行はファイル名からパスと拡張子を削除し、"jpgfile/filename.jpg" に置き換えます。パス名「cr2files」と「jpgfiles」を正しいパス名に変更することを忘れないでください。必要に応じて変数を使用するか、パラメータのスクリプトにパス名を渡すことができます。

編集する:

「東芝 ser」の空間が基本名をめちゃくちゃにしています。解決策は次のとおりです。

#!/bin /bash
IFS=’’
for file in “$1”/*; do
   test=”$2/$(basename ${file:: -3})jpg”
   if [ ! –f “$test” ]; then
      rm “$file”
   fi
done

"volumes/toshiba ser/raw" "volumes/toshiba ser/jpg"のように./removephotos.shを呼び出します。 2行の一重引用符の間にIFS = ''という文字はありません。

関連情報