2014-09-23 109 views
1

我想比較本地和遠程目錄,並確定遠程目錄中不存在的文件或不同的校驗和文件。Bash本地和遠程目錄比較

目標是讓腳本返回要迭代的文件列表。到目前爲止,我有以下,但它不是最好的。

rsync -avnc /path/to/files [email protected]:/path/to/files/ | grep -v "sending incremental file list" | grep -v "bytes received" | grep -v "total size is" | grep -v "./" 

我剛剛使用管道grep -v調用刪除我不關心的位。有沒有更好的方法來比較使用SSH的本地和遠程目錄?看起來他們應該是。重要的限制是我必須在兩臺獨立的機器上比較目錄。

+0

如果你想使生活更容易,看看[**如何通過ssh **來區分目錄](http://stackoverflow.com/questions/20969124/how-to-diff-directories-over-ssh) – 2014-09-23 05:34:03

回答

0

我會這樣做,使用一對匹配的find調用和致電​​comm

# comm -3 produces two-column output, skipping lines in common. 
comm -3 <(find $LOCALDIR | sort) <(ssh [email protected] find $REMOTEDIR | sort) 

如果你寫你的本地和遠程輸出到臨時文件,可以輕鬆打印任何系統上丟失的文件的列表;在你的find命令中有一點聰明,你可能會比較兩個系統之間的文件校驗和。

請注意,此解決方案使用基於行的文本比較,因此不能免疫奇怪的文件名。如果需要使用換行符或其他特殊字符處理文件名,則可能需要調查更聰明的解決方案(可能涉及find ... -print0)。

1
comm -3 <(ls -l /path/to/files | awk '{print $5"\t"$9}' | sort) <(ssh [email protected] ls -l /path/to/files | awk '{print $5"\t"$9}' | sort) 

$5是大小

$9是文件名

然後,打印文件只存在於遠程服務器