2009-02-24 35 views
2

比方說,我有兩個目錄結構:使用Unix查找(1),我如何在一棵樹中找到比另一棵樹中的對應文件更新的文件?

/var/www/site1.prod 
/var/www/site1.test 

我想用find(1)地看到,在/var/www/site1.test比他們的同行/var/www/site1.prod較新的文件。

我可以用find(1)來做到這一點嗎?如果是這樣,怎麼辦?

+0

retitle:'find(1)files new than other'at least,please – 2009-02-24 19:50:03

+0

+1 interesting。雖然可能會被關閉,因爲這與系統管理更多地涉及到編程。我,我沒有把他們整齊地分開。 – 2009-02-24 19:59:40

+0

@Adriano Varoli廣場:我會把shell腳本當作編程:) – Eddie 2009-02-24 20:13:36

回答

2

我認爲你不能單獨找做到這一點,但你可以做這樣的事情

$ 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 
0

如果你看一下-fprintf選項,你應該能夠創建兩個認定,輸出到兩個文件列出文件名稱和修改時間。然後,您應該能夠區分這兩個文件以查看發生了什麼變化。

8

你也可以使用rsync -n

的rsync -av -n /var/www/site1.test /var/www/site1.prod

應該這樣做。

4

使用發現

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 
0

我知道你特別要求新的,但我認爲這是一件好事,知道所有的選擇。

我會使用diff -ur dir1 dir2。

也許時間戳改變了,也許它沒有,但是這並不一定告訴你內容是否相同。 Diff會告訴你內容是否改變。如果您真的不想看到內容,請使用diff -rq來查看已更改的文件。