我正在尝试比较本地与远程目录,并识别远程目录中不存在或通过校验和不同的文件。
目标是让脚本返回要迭代的文件列表。到目前为止,我有以下内容,但这不是最好的。
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比较本地和远程目录?看起来应该是这样。重要的限制是我必须在两台不同的机器上比较目录。
答案 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)
# comm -3 produces two-column output, skipping lines in common.
comm -3 <(find $LOCALDIR | sort) <(ssh remote@host find $REMOTEDIR | sort)
如果将本地和远程输出写入临时文件,则可以轻松地在任一系统上打印丢失文件列表;在find命令中有一点聪明,你可能会比较两个系统之间的文件校验和。
请注意,此解决方案使用基于行的文本比较,因此不会受到奇怪的文件名的影响。如果您需要使用换行符或其他特殊字符处理文件名,则可能需要调查更聪明的解决方案(可能涉及find ... -print0
)。