如何同步两个文件名相同但扩展名不同的文件夹

如何同步两个文件名相同但扩展名不同的文件夹

有没有办法使用 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替换;enters/new 行。以获得更具可读性的文本。

相关内容