Bash
在 MacOS 中同步具有不同副檔名的文件
拍完照片後,我有兩個文件夾:JPG(文件 *.jpg)和 RAW(文件 *.CR2)。通常我會查看 JPGs 文件夾並刪除那些我不喜歡的。
我想要的是創建一個 bash 腳本來檢查:
for file.cr2 in folder.getFiles if file.jpg is NOT in folder2.getfiles delete file.cr2
我看過一些 rsync 的例子,但文件副檔名相同,而且我不太擅長 bash,所以我可以用 C 來做,但我想學習。
試試這個:
for file in cr2files/*; do test=”jpgfiles/$(basename ${file:: -3})jpg” if [ ! –f “$test” ]; then echo “$file” fi done
如果它得到你想要的結果,你可以替換這行 - echo“ $ file” - with - rm “ $ 文件” -。行 – test=”jpgfiles/ $ (basename $ {file:: -3])jpg” – 從文件名中刪除路徑和副檔名,並用“jpgfile/filename.jpg”替換它們。請記住將路徑名“cr2files”和“jpgfiles”更改為正確的。如果您願意,您可以使用變數,也可以在參數中將路徑名傳遞給您的腳本。
編輯:
您在“Toshiba ser”中的空間弄亂了基本名稱。這是解決方案:
#!/bin /bash IFS=’’ for file in “$1”/*; do test=”$2/$(basename ${file:: -3})jpg” if [ ! –f “$test” ]; then rm “$file” fi done
像這樣呼叫它 ./removephotos.sh “volumes/toshiba ser/raw” “volumes/toshiba ser/jpg”。請注意,第 2 行 IFS=’’ 中的單引號之間沒有任何內容。