比较bash中2个目录的所有文件大小

时间:2011-03-20 15:20:25

标签: bash file diff size directory

有时会发生由于某种原因复制许多文件(即外部硬盘驱动器;使用Nautilus文件管理器)崩溃的过程。如果我再次启动它,我会忽略已经存在的文件,尽管其中一些文件没有100%复制。因此,属性窗口显示源文件夹中的“460文件(225 GB)”和目标文件夹中的“460文件(222 GB)”...

我现在如何找出部分复制的文件(可能使用lsdiff)?

3 个答案:

答案 0 :(得分:3)

如果您有rsync可用,则可以在两个本地目录之间正常工作。

答案 1 :(得分:2)

for f1 in dir1/*
do
    f2="dir2/${f##*/}"
    if [[ $(sum "$f1") != $(sum "$f2") ]]
    then
        printf 'File %s does not match %s\n' "$f1" "$f2"
    fi
done

或者您可以将其用作测试:

    if ! diff -q "$f1" $f2" >/dev/null

答案 2 :(得分:0)

我修改了丹尼斯的代码。它比较文件大小。比较校验和更快但不安全。

source=/???
target=/???


for i in "$source"/*
do
 f1=`stat -c%s $i`
 f2=`stat -c%s $target/${i##*/}`
  if [ "$f1" = "$f2" ]; then
        echo "$i" "$f1" VS "$target/${i##*/}" "$f2" "====>>>" "OK"
  else
        echo "$i" "$f1" VS "$target/${i##*/}" "$f2" "====>>>" "BAD"
  fi
done