Сравните все размеры файлов 2 каталогов в Bash - PullRequest
1 голос
/ 20 марта 2011

Иногда случается, что по какой-то причине происходит процесс копирования многих файлов (т.е. на внешний жесткий диск; с помощью файлового менеджера Nautilus).Если я запустил его снова, я использую его, чтобы игнорировать уже существующие файлы, хотя некоторые из них не были скопированы на 100%.Поэтому в окне свойств отображается «460 файлов (225 ГБ)» в исходной папке и «460 файлов (222 ГБ)» в целевой папке ...

Как теперь узнать, какие файлы были скопированы толькочастично (возможно, используя ls и diff)?

Ответы [ 3 ]

3 голосов
/ 20 марта 2011

Если у вас есть rsync, это прекрасно работает между двумя локальными каталогами.

2 голосов
/ 20 марта 2011
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
0 голосов
/ 20 марта 2011

я модифицировал код Денниса. он сравнивает размеры файлов. Быстрее, но не безопаснее, чем сравнивать контрольные суммы ..

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  
...