gpt4 book ai didi

linux - 为每个文件递归创建单独的MD5文件

转载 作者:行者123 更新时间:2023-12-03 09:58:36 24 4
gpt4 key购买 nike

我一直想关注我的文件存储,并注意随着时间的流逝而损坏的文件。

为此,我试图编写一个Linux bash/shell脚本来遍历目录,并在与每个文件相同的目录中为每个文件创建MD5哈希和文件。我不喜欢拥有包含所有哈希的单个文件,因为如果单个文件损坏或丢失,它就会全部掉下来。

- Directory 1
- TestFile.txt
- TestFile.txt.md5
- AnotherTestFile.wav
- AnotherTestFile.wav.md5
- Directory 2
- MyDetails.docx
- MyDetails.docx.md5

我试图以多种方式使用 md5sum命令,但是它总是想要:
  • 在单个文件中创建所有哈希。
  • 为每个文件创建单独的.md5哈希文件,但是md5哈希文件中的文件名包含完整的文件路径(例如./Documents/Directory1/TestFile.txt),而不仅仅是文件名(例如TestFile.txt)。

  • 我在Windows上确实有一个执行此操作的工具( MD5Checker),但是它正在通过网络对我的文件服务器上的文件进行哈希处理。我希望可以在Linux OS上本地运行的东西。

    有什么想法吗?

    我的最新尝试(我知道这很糟糕)

    它创建了MD5文件,但是hashsum文件中的文件路径是完整文件路径,而不是基本文件路径。
    #!/bin/bash

    function md5_dir {
    for file in $1/*;
    do
    if [[ -f "$file" && ! $file == *.md5 ]];
    then
    file_basename=$(basename "$file");
    echo "$file" "$file_basename";
    md5sum "$file" > "$file.md5";
    fi;
    if [[ -d "$file" ]];
    then
    md5_dir $file
    fi;
    done;
    }



    echo "$1"
    md5_dir "$1";

    最佳答案

    find是递归处理文件的必备工具:

    find . -type f ! -name '*.md5' -execdir sh -c 'md5sum "$1" > "$1.md5"' _ {} \;

    这将选择文件(未命名为'* .md5')并运行给定的内联Shell脚本,其文件名为 $1

    关于linux - 为每个文件递归创建单独的MD5文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60289993/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com