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

发布于 2024-10-25 00:43:38 字数 229 浏览 1 评论 0原文

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

我现在如何找出哪些文件仅被部分复制(也许使用 lsdiff)?

Sometimes it happens that for some reason the process of copying many files (i.e. to external HDD; using Nautilus file manager) crashes. If I then start it again, I use to ignore already existing files, though some of them were not copied 100%. So the properties window shows me "460 Files (225 GB)" in source folder and "460 Files (222 GB)" in destination folder...

How do I now find out which files have only been copied partially (maybe using ls and diff)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

表情可笑 2024-11-01 00:43:38

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

If you have rsync available, that works just fine between two local directories.

在梵高的星空下 2024-11-01 00:43:38
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
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

Or you could use this as your test:

    if ! diff -q "$f1" $f2" >/dev/null
带刺的爱情 2024-11-01 00:43:38

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

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  

i modified dennis' code. it compares file sizes. Faster but not safer then comparing checksums..

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  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文