使用Unix find(1),如何在一棵树中查找比另一棵树中的文件更新的文件?

时间:2009-02-24 19:41:59

标签: unix find

假设我有两个目录结构:

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

我想使用find(1)查看/var/www/site1.test中比/var/www/site1.prod中的文件更新的文件。

我可以使用find(1)执行此操作,如果是,请执行此操作?

5 个答案:

答案 0 :(得分:8)

您也可以使用rsync -n

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

应该这样做。

答案 1 :(得分:4)

使用find

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

这适用于包含空格的文件名,以及适用于大量文件。

根据Eddie的评论区分修改文件和遗失文件

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

答案 2 :(得分: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

答案 3 :(得分:0)

如果查看-fprintf选项,您应该能够创建两个查找,输出到两个文件中,列出文件名和修改时间。然后,您应该能够区分两个文件以查看更改的内容。

答案 4 :(得分:0)

我知道您特别要求更新,但我认为了解您的所有选择总是好的。

我会使用diff -ur dir1 dir2。

也许时间戳改变了,也许它没有改变,但这并不一定会告诉你内容是否相同。 Diff会告诉您内容是否已更改。如果你真的不想看到内容,请使用diff -rq来查看更改的文件。