比方說,我有兩個目錄結構:使用Unix查找(1),我如何在一棵樹中找到比另一棵樹中的對應文件更新的文件?
/var/www/site1.prod
/var/www/site1.test
我想用find(1)地看到,在/var/www/site1.test
比他們的同行/var/www/site1.prod
較新的文件。
我可以用find(1)來做到這一點嗎?如果是這樣,怎麼辦?
比方說,我有兩個目錄結構:使用Unix查找(1),我如何在一棵樹中找到比另一棵樹中的對應文件更新的文件?
/var/www/site1.prod
/var/www/site1.test
我想用find(1)地看到,在/var/www/site1.test
比他們的同行/var/www/site1.prod
較新的文件。
我可以用find(1)來做到這一點嗎?如果是這樣,怎麼辦?
我認爲你不能單獨找做到這一點,但你可以做這樣的事情
$ cd /var/www/site1.test
$ files=`find .`
$ for $f in $files; do
if [ $f -nt /var/www/site1.prod/$f ]; then echo "$f changed!"; fi;
done
如果你看一下-fprintf選項,你應該能夠創建兩個認定,輸出到兩個文件列出文件名稱和修改時間。然後,您應該能夠區分這兩個文件以查看發生了什麼變化。
你也可以使用rsync -n
的rsync -av -n /var/www/site1.test /var/www/site1.prod
應該這樣做。
使用發現,
cd /var/www/site1.test
find . -type f -print | while read file ; do
[ "$file" -nt /var/www/site1.prod/"$file" ] && echo "File '$file' changed"
done
這將包含空格,以及工作文件名的大容量文件的工作。
要修改和丟失的文件區分,按照埃迪的意見,
cd /var/www/site1.test
find . -type f -print | while read file ; do
[ "$file" -nt /var/www/site1.prod/"$file" ] && reason=changed
[ \! -e /var/www/site1.prod/"$file" ] && reason=created
[ -n "$reason" ] && echo "$file $reason"
done
我知道你特別要求新的,但我認爲這是一件好事,知道所有的選擇。
我會使用diff -ur dir1 dir2。
也許時間戳改變了,也許它沒有,但是這並不一定告訴你內容是否相同。 Diff會告訴你內容是否改變。如果您真的不想看到內容,請使用diff -rq來查看已更改的文件。
retitle:'find(1)files new than other'at least,please – 2009-02-24 19:50:03
+1 interesting。雖然可能會被關閉,因爲這與系統管理更多地涉及到編程。我,我沒有把他們整齊地分開。 – 2009-02-24 19:59:40
@Adriano Varoli廣場:我會把shell腳本當作編程:) – Eddie 2009-02-24 20:13:36