md5 目录树中的所有文件

2024-02-21

我有一个结构如下的目录:

.
├── Test.txt
├── Test1
│   ├── Test1.txt
│   ├── Test1_copy.txt
│   └── Test1a
│       ├── Test1a.txt
│       └── Test1a_copy.txt
└── Test2
   ├── Test2.txt
   ├── Test2_copy.txt
   └── Test2a
       ├── Test2a.txt
       └── Test2a_copy.txt

我想创建一个 bash 脚本,对该目录中的每个文件进行 md5 校验和。我希望能够在 CLI 中输入脚本名称,然后输入我想要散列并使其工作的目录的路径。我确信有很多方法可以实现这一点。目前我有:

#!/bin/bash

for file in "$1" ; do 
    md5 >> "${1}__checksums.md5"
done

这只是挂起并且不起作用。也许我应该使用查找?

需要注意的是 - 我想要散列的目录将包含具有不同扩展名的文件,并且可能并不总是具有完全相同的树结构。我想要一些能在这些不同情况下工作的东西。


Using md5deep

md5deep -r path/to/dir > sums.md5

Using find and md5sum

find relative/path/to/dir -type f -exec md5sum {} + > sums.md5

请注意,当您运行检查 MD5 和时md5sum -c sums.md5,您需要从生成的同一目录运行它sums.md5文件。这是因为find输出相对于您当前位置的路径,然后将其放入sums.md5 file.

如果这是一个问题你可以relative/path/to/dir绝对的(例如,通过输入$PWD/在你的路径前面)。这样你就可以运行检查sums.md5从任何地点。缺点是现在sums.md5包含绝对路径,这使得它更大。

功能齐全,使用find and md5sum

您可以将此功能添加到您的.bashrc文件(位于您的$HOME目录):

function md5sums {
  if [ "$#" -lt 1 ]; then
    echo -e "At least one parameter is expected\n" \
            "Usage: md5sums [OPTIONS] dir"
  else
    local OUTPUT="checksums.md5"
    local CHECK=false
    local MD5SUM_OPTIONS=""

    while [[ $# > 1 ]]; do
      local key="$1"
      case $key in
        -c|--check)
          CHECK=true
          ;;
        -o|--output)
          OUTPUT=$2
          shift
          ;;
        *)
          MD5SUM_OPTIONS="$MD5SUM_OPTIONS $1"
          ;;
      esac
      shift
    done
    local DIR=$1 

    if [ -d "$DIR" ]; then  # if $DIR directory exists
      cd $DIR  # change to $DIR directory
      if [ "$CHECK" = true ]; then  # if -c or --check option specified
        md5sum --check $MD5SUM_OPTIONS $OUTPUT  # check MD5 sums in $OUTPUT file
      else                          # else
        find . -type f ! -name "$OUTPUT" -exec md5sum $MD5SUM_OPTIONS {} + > $OUTPUT  # Calculate MD5 sums for files in current directory and subdirectories excluding $OUTPUT file and save result in $OUTPUT file
      fi
      cd - > /dev/null  # change to previous directory
    else
      cd $DIR  # if $DIR doesn't exists, change to it to generate localized error message
    fi
  fi
}

跑完之后source ~/.bashrc, 您可以使用md5sums像普通命令一样:

md5sums path/to/dir

将生成checksums.md5文件输入path/to/dir目录,包含该目录及子目录下所有文件的MD5和。使用:

md5sums -c path/to/dir

检查金额path/to/dir/checksums.md5 file.

注意path/to/dir可以是相对的或绝对的,md5sums无论哪种方式都会工作得很好。结果checksums.md5文件始终包含相对于的路径path/to/dir。 您可以使用与默认不同的文件名checksums.md5通过提供-o or --output选项。所有选项,除此之外-c, --check, -o and --output被传递给md5sum.

上半场md5sums函数定义负责解析选项。看这个答案 https://stackoverflow.com/a/14203146/6231376了解更多相关信息。后半部分包含解释性评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

md5 目录树中的所有文件 的相关文章

随机推荐

  • Java 字符串用“.”分割(点)[重复]

    这个问题在这里已经有答案了 为什么这段代码的第二行会抛出ArrayIndexOutOfBoundsException String filename D some folder 001 docx String extensionRemove
  • 如何登录? Django TastyPie 与 ApiKeyAuthentication 实际认证流程

    我有一个 Adob e Air 移动应用程序 可以通过 TastyPie 与 Django 进行通信 要使用该应用程序 人们必须先注册 因此他们必须提供他们的电子邮件和密码 之后他们将能够 登录 我认为最好的主意是 在输入成功的用户名 密码
  • 快速构建 error_if_any_output_files_are_specified_they_all_must_be

    当转换为在 Xcode 10 上使用新的构建系统时 我的几个扩展目标的输出中出现以下错误
  • 如何计算SQL Server 2008中记录之间的时间

    对于 sql 2008 中的审计表 我需要计算每个订单在给定步骤中的时间 表示为新列 Old New Time Entered Order Number NULL Step 1 4 30 12 10 43 1C2014A Step 1 St
  • 为什么 0 除以 0 会出错?

    我在代码中进行的计算中遇到了这个问题 如果除数也为 0 则除数为 0 在我的代码中 对于这种情况我返回 0 我想知道 虽然除以零通常是未定义的 但为什么不为这种情况破例呢 我的理解为什么除以零是未定义的基本上是它不能逆转 然而 我在 0 0
  • 在 asp.net 中不使用 ScriptManager 从 JavaScript 调用 WebServices

    我已经为我的 Asp net 项目创建了一个 Web 服务 目前我正在通过引用中的服务从 JavaScript 访问该服务ScriptManager 但我不想添加ScriptManager这样我就可以在任何 HTML 页面中使用它 好的 因
  • 雪花 - 横向不能位于连接的左侧

    我有一个变体数据类型 我正在对其执行横向展平 但随后我需要左连接其中一个 json 元素 以从 Snowflake 中的另一个关系表中查找相应 ID 的值 当我这样做时 它会给我错误 横向视图不能位于连接的左侧 这是没有意义的 因为如果我不
  • 在 varchar 字段而不是数字字段上使用 BETWEEN ?

    我正在使用 ColdFusion 8 和 SQL Server 2008 R2 我正在尝试查询一列值以获取值在一定范围内的行 该列应该是数字 但事实并非如此 它被设置为 varchar 由其他人 有 100 000 多行数据 这是数据的假样
  • 使用正则表达式删除脚本标签

    我正在尝试使用我在该网站中找到的正则表达式 但它似乎不起作用 有任何想法吗 输入字符串 sFetch 123456 Regex sFetch Regex Replace sFetch
  • 将存储为文本数据类型的数字转换为 int

    我有一个导入结果的数据库 数据库是可交付的 我没有自己进行导入 也无法访问原始数据来自己进行导入 也就是说 有一个整数值被导入到文本数据类型中 所有存储的值都是有效整数 我不断得到 Explicit conversion from data
  • Ionic 3 - 键盘无缘无故地将内容向上推,并超越其他内容

    我正在 Ionic 中开发一个简单的应用程序 我有一个问题 键盘将我的输入字段向上推到另一个 div 上 而键盘有足够的空间 我该如何解决 我已经在互联网上浏览过 但无法找到解决我的问题的任何方法 发生的情况是这样的 正如您所看到的 文本在
  • 来自 POST 的 res.redirect

    由于某种原因 登录完成后我无法重定向到 blog 在我的登录控制器中 我有以下内容 module exports post function req res var login req body login if login req bod
  • sudo: python: 找不到命令

    我要实现sudo python找到Python 3 我遇到了一个奇怪的问题 在终端中输入python version给了 3 6 但是sudo python version给了2 7 经过尝试一些事情后我终于卸载了 2 7sudo apt
  • jQuery 用于获取表行上的 Click 事件

    我有下表 table tr class rows td cell1 td td cell2 td tr table 如果我点击了 如何设置警报消息any of the column of 使用jquery 您可以使用委托来获得更好的性能 它
  • JavaScript 中这个东西是什么?

    考虑 var something wtf null omg null 自从我上次使用 JavaScript 编程以来 我的 JavaScript 知识仍然非常零碎 但我想我现在已经重新学习了大部分知识 除了这个 我不记得以前见过这个 它是什
  • 如何映射对象的键以使 JSON 更容易在 React 中处理

    如果我有这个 JSON name Active user config status active name Paused user config status active 然后我可以渲染一个 React 组件并轻松访问数据 render
  • jenkins pipelines:shell脚本无法获取更新的环境变量

    在 Jenkins 中 我想获取用户输入并传递给 shell 脚本以供进一步使用 我尝试设置为环境变量 但shell脚本无法获取最新值 旧值是echo pipeline agent none environment myVar someth
  • Rails 中按月和年对记录进行分组

    我使用的是 Ruby 1 9 2 Rails 3 0 x 并且使用 MySQL DB 我有一个消息模型 每天都可以发布新消息 我有一个索引操作 我想在其中显示按月份和年份分组的这些消息 这主要用于过滤消息 我的查询如下所示 active m
  • 我实际上如何从方法外部获取异步 Web 请求的响应?

    我有点困惑 我正在尝试以异步方式发布到我的网络服务 理想情况下我想启动请求 在 UI 上显示加载微调器 然后当异步请求完成时处理响应 并且如果有错误则显示错误 或对结果进行其他操作 这是我的代码 我在这里调用请求并传递一些数据 privat
  • md5 目录树中的所有文件

    我有一个结构如下的目录 Test txt Test1 Test1 txt Test1 copy txt Test1a Test1a txt Test1a copy txt Test2 Test2 txt Test2 copy txt Tes