Bash

如何同步兩個文件名相同但副檔名不同的文件夾

  • May 23, 2022

有沒有辦法使用 rsync 同步兩個文件夾?

我想以 JPG 和 RAW 格式拍攝照片。由於查看 JPG 比打開 RAW 快得多,我想在 JPG 文件夾中進行剔除,然後將其同步到 RAW 文件夾。但是,它們包含不同的副檔名但文件名相同。

我意識到最可能的解決方案是創建一個 sh 來完成此操作,然後給它一個別名。

一般來說,如果您有類似的文件名在某個特定位置發生變化,您可以將這些差異設置為

$$ $$括號:

ruslanas@ruslanas test]$ ls 
a.jpg  a.raw  a.doc
[ruslanas@ruslanas test]$ ls a.{jpg,raw}
a.jpg  a.raw
[ruslanas@ruslanas test]$ 

或者如果您只有 jpg 和 raw 副檔名並且只有這 2 個副檔名,則只使用星號。

另外,如果您想使用單行從 raw 中提取 jpg 然後將 raw 移動到 raw 目錄:

cd /path/to/fresh-photos && ls *raw | while read line ; do culling $line -output /path/to/processed/jpg/$(echo $line | sed 's/raw$/jpg/g') && mv $line /path/to/processed/raw ; done

只需用您的冷卻器替換剔除,就可以了!

上一行的另一個缺點是,您必須為新文件提供臨時目錄…還有一種簡單的方法可以使其僅對未處理的 jpg 進行剔除:

RAW=/path/to/raw && JPG=/path/to/jpg && find $RAW $JPG -type f \( -name '*.raw' -o -name '*.jpg' \) -exec basename {} \; | sed -e 's/\.jpg$//g' -e 's/\.raw$//g' | sort -n | uniq -u | while read line ; do echo "processing ${RAW}/${line}.raw" && culling ${line}.raw -output ${JPG}/$line.jpg ; done

再次,用我們的擁抱命令替換剔除。

如果您只需要從 RAW 中刪除 JPG 目錄中不存在的照片:

RAW=/path/to/raw && JPG=/path/to/jpg && find $RAW $JPG -type f \( -name '*.raw' -o -name '*.jpg' \) -exec basename {} \; | sed -e 's/\.jpg$//g' -e 's/\.raw$//g' | sort -n | uniq -u | while read line ; do echo "Removing: ${RAW}/${line}.raw" && rm -f ${RAW}/${line}.raw ; done

請記住,所有副檔名都應為小寫,如果不更改為您身邊的副檔名。

在首次發布之前,執行以下測試命令:

RAW=/path/to/raw && JPG=/path/to/jpg && find $RAW $JPG -type f \( -name '*.raw' -o -name '*.jpg' \) -exec basename {} \; | sed -e 's/\.jpg$//g' -e 's/\.raw$//g' | sort -n | uniq -u | while read line ; do echo "Removing: ${RAW}/${line}.raw" && echo rm -f ${RAW}/${line}.raw ; done

此外,如果您要將其放入script.bash文件中,則將&&;替換為enters/new 行。更多可讀文本。

引用自:https://unix.stackexchange.com/questions/702351