在两个文件夹之间查找和替换图像文件

时间:2014-08-19 02:35:12

标签: macos bash shell filesystems

我的Mac硬盘上有两个文件夹。

目录A和目录B

两个目录都包含图像文件。

我需要找到匹配的文件名是Dir A.

如果我发现匹配用Dir B中匹配的文件覆盖Dir A中的文件。

我该如何处理?

1 个答案:

答案 0 :(得分:5)

rsync是用于同步文件的 最佳工具。它有很多选项,所以一定要详细阅读手册页。

rsync -rv --inplace --existing /path/to/dir/b/* /path/to/dir/a

如果你想编写一个脚本,那么这应该是你想要的:

#!/bin/bash

DIR_A='/path/to/dir_a'
DIR_B='/path/to/dir_b'

for file in "$DIR_B"/*; do 
    name="${file##*/}" 
    if [[ -e $DIR_A/$name ]]; then 
        echo "Match found = $name"; 
        cp "$file" "$DIR_A" 
    fi
done

它的作用是,在目录B中查找文件并提取文件名(因为我们使用绝对路径)。它检查该文件名以查看它是否存在于目录A中。-e是执行该操作的测试。如果测试成功,我们会打印一条消息,说明Match found以及文件名。然后,我们继续将文件从目录B复制到目录A.

现在,您可以选择删除打印到屏幕上的消息,如果您不希望副本存在于目录B中,请使用mv代替cp