AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 495506
Accepted
neverMind9
neverMind9
Asked: 2019-01-20 11:15:58 +0800 CST2019-01-20 11:15:58 +0800 CST 2019-01-20 11:15:58 +0800 CST

复制数千个文件后检查数据完整性[重复]

  • 772
这个问题在这里已经有了答案:
从一个硬盘驱动器复制到另一个硬盘驱动器后验证大目录 3 个答案
3年前关闭。

我将数千个文件复制到 exFAT MicroSD 卡中。

文件数和字节数相同,但我怎么知道数据是否损坏?

如果 JackPal Android 终端也支持该命令,那就太好了。

storage data
  • 5 5 个回答
  • 11202 Views

5 个回答

  • Voted
  1. xenoid
    2019-01-20T12:43:08+08:002019-01-20T12:43:08+08:00

    使用 MD5 sums 是一个好方法,但使用它的规范方法是:

    1. cd到源文件的目录并发出:

      md5sum * >/path/to/the/checksumfile.md5
      

    如果您有多个级别的目录,则可以使用shopt -s globstar并替换*为**/*.

    请注意,MD5 文件中的文件规范与命令行中提供的完全一样(相对路径,除非您的模式以 开头/)。

    1. cd到复制文件的目录并发出:

      md5sum -c /path/to/the/checksumfile.md5
      

    使用-c,md5sum读取提供的 MD5 文件中的文件规范,计算这些文件的 MD5,并将它们与 MD5 文件中的值进行比较(这就是为什么文件规范通常最好保留相对,因此您可以重复使用 MD5各种目录中的文件上的文件)。

    以这种方式使用 MD5 sum 会立即告诉您 MD5 的差异以及丢失的文件。

    • 19
  2. Best Answer
    sourcejedi
    2019-01-20T12:38:35+08:002019-01-20T12:38:35+08:00

    卸载、弹出和重新安装设备。然后使用

    diff -r source destination
    

    如果你rsync以前做副本,rsync -n -c可能会很方便,几乎和diff. 不过,它并没有进行逐位比较。它使用 MD5 校验和。


    在从一个硬盘驱动器复制到另一个硬盘驱动器后验证大目录有一些类似的答案和其他详细信息

    • 13
  3. JoL
    2019-01-20T17:04:00+08:002019-01-20T17:04:00+08:00
    rsync -rc original-dir/ copied-dir/
    

    -c导致 rsync 通过 MD5 校验和比较文件(没有它,它通常只使用时间戳和大小来进行更快的比较)。

    这也将导致 rsync 复制它看到的与目标不同或丢失的任何内容。为避免这种情况,您还可以使用-nand -i。前者确保 rsync 不做任何更改而只进行比较,后者使其显示它看到的差异。

    例如,我有以下目录:

    $ find dir1/ dir2/
    dir1/ dir2/
    dir1/
    dir1/d
    dir1/d/a
    dir1/d/b
    dir1/c
    dir2/
    dir2/d
    dir2/d/a
    dir2/d/b
    

    和这个:

    $ rsync -rcni dir1/ dir2/
    >f+++++++++ c
    >fc.T...... d/b
    

    通过所有这些+s 告诉我,该文件c不存在于 中dir2,而 filed/b存在,但不同(由c第一列中的 表示)。T说是时候更新了(如果我们没有使用)-n。

    的输出格式-i在 rsync 的手册页中有描述。您可以通过键入(并按 Enter)进入man rsync解释该输出的部分。/--itemize-changes$

    • 8
  4. don bright
    2019-01-20T22:18:53+08:002019-01-20T22:18:53+08:00

    除了上面的其他很好的答案,我还建议考虑来自http://md5deep.sourceforge.net/的 hashdeep 。它在科学界拥有庞大的用户群,他们经常不得不用分散在数千个目录中的 TB 数据来做这类事情。

    • 5
  5. neverMind9
    2019-01-20T11:20:21+08:002019-01-20T11:20:21+08:00

    可以为单个文件生成哈希和并将它们输出到一个文本文件中,其中可以生成 MD5 哈希。对于该文本文件,您可以使用您喜欢的任何散列函数,因为该散列列表的大小不足以在使用更硬的散列函数(例如sha512sum.
    我使用cksum它是因为它具有普遍可用性(sum并且crc32不包含在 JackPal 的 Android 终端中)和最高速度。它不是一种加密的、安全的算法sha512sum,但任何散列函数都足以在离线环境中验证数据的完整性。但是,如果您希望所有文件哈希具有相同的长度(即 32),请使用md5sum最快的普遍支持的安全哈希算法(虽然它较旧,但它比任何sha算法都快得多,并且可以完成它的工作)。

    在源和目标上运行这些命令:

    cksum /path/to/folder/* | tee -a hash.files.txt |cut -f 1 -d " " >>hash.list.txt #extracts pure hashsum string only for the output, to hide the different file path.
    md5sum hash.list.txt
    

    …或使用单个命令:

    cksum /path/to/folder/* | tee -a hash.files.txt | cut -f 1 -d " " | tee -a hash.list.txt | sort | md5sum
    

    hashsum 列表文件的名称(在我的示例中为hash.list.txt和hash.files.txt)可以是您指定的任何名称。生成两个文件以识别损坏的文件(第一个文件也包含文件名,第二个文件用于比较)。

    sort因为sh和bash实现字母排序略有不同。sort补偿它。

    • 4

相关问题

  • 用另一个 lvm 的空间扩展 lvm

  • 在 awk 脚本中使用 if 和 shell 变量

  • 带有 PC 跟踪机制的 Ubuntu 18.04 仍然是“免费软件”?[关闭]

  • ceph-mon 无法在 rasberry pi (raspbian 8.0) 上启动

  • 如何从网络存储中监控/删除下载的电影和音乐?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve