有没有办法使用 rsync 同步两个文件夹?
我想拍摄 JPG 和 RAW 格式的照片。由于查看 JPG 比打开 RAW 快得多,因此我想在 JPG 文件夹中进行剔除,然后将其同步到 RAW 文件夹。然而,它们包含不同的扩展名,但文件名相同。
我意识到最可能的解决方案是创建一个 sh 来完成此任务,然后给它一个别名。
答案1
一般来说,如果您有相似的文件名,但在某些特定位置发生了变化,您可以在 [] 括号中设置这些差异:
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 个扩展名,则只需使用星号。
另外,如果您想使用 singleliner 从 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
文件中,请将&&
and替换;
为enter
s/new 行。以获得更具可读性的文本。