Bash
如何同步兩個文件名相同但副檔名不同的文件夾
有沒有辦法使用 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
文件中,則將&&
和;
替換為enter
s/new 行。更多可讀文本。