Bash本地vs远程目录比较

时间:2014-09-23 03:13:06

标签: linux bash

我正在尝试比较本地与远程目录,并识别远程目录中不存在或通过校验和不同的文件。

目标是让脚本返回要迭代的文件列表。到目前为止,我有以下内容,但这不是最好的。

rsync -avnc /path/to/files remoteuser@remoteserver:/path/to/files/ | grep -v "sending incremental file list" | grep -v "bytes  received" | grep -v "total size is" | grep -v "./"

我刚刚使用了管道grep -v调用删除了我不关心的位。有没有更好的方法来使用SSH比较本地和远程目录?看起来应该是这样。重要的限制是我必须在两台不同的机器上比较目录。

2 个答案:

答案 0 :(得分:1)

comm -3 <(ls -l /path/to/files | awk '{print $5"\t"$9}' | sort) <(ssh remoteuser@remoteserver ls -l /path/to/files | awk '{print $5"\t"$9}' | sort)

$5的大小

$9是文件名

然后,打印仅存在于远程服务器中的文件

答案 1 :(得分:0)

我会使用一对匹配的find来电并拨打comm

# comm -3 produces two-column output, skipping lines in common.
comm -3 <(find $LOCALDIR | sort) <(ssh remote@host find $REMOTEDIR | sort)

如果将本地和远程输出写入临时文件,则可以轻松地在任一系统上打印丢失文件列表;在find命令中有一点聪明,你可能会比较两个系统之间的文件校验和。

请注意,此解决方案使用基于行的文本比较,因此不会受到奇怪的文件名的影响。如果您需要使用换行符或其他特殊字符处理文件名,则可能需要调查更聪明的解决方案(可能涉及find ... -print0)。