如何将多个文件重命名为其内容的 MD5 和?

如何将多个文件重命名为其内容的 MD5 和?

我想将一些文件重命名为其内容的 MD5 和;例如,如果文件foo为空,则应将其重命名为d41d8cd98f00b204e9800998ecf8427e.

它必须是脚本还是我可以使用类似rename工具的东西?

答案1

格伦的回答很好;这是多个文件的改进:

md5sum file1 file2 file3 | # or *.txt, or whatever
    while read -r sum filename; do
        mv -v "$filename" "$sum"
    done

如果您要生成find或类似的文件,则可以将调用替换md5sum为类似的内容find . <options> -print0 | xargs -0 md5sum(输出也通过管道传输到 shell 循环中)。

这是获取 的输出md5sum,该输出由多行和一个 sum 组成,然后是它对应的文件,并将其输送到一个 shell 循环中,该循环读取每一行并发出一个mv命令,将文件从原始名称重命名为 sum。任何具有相同金额的文件将被覆盖;但是,除非出现异常情况(例如您正在处理 md5 哈希冲突),否则这意味着它们具有相同的内容,因此您无论如何都不会丢失任何数据。如果需要对每个文件引入其他操作,可以将它们放入循环中,引用变量$filename$sum,其中分别包含原始文件名和 MD5 和。

答案2

zsh

autoload zmv # best in ~/.zshrc
zmv '**/*(#qD.)' '$(md5sum<$f)'

将递归地重命名所有常规文件。

(请注意,如果同一目录中的两个文件具有相同的校验和,它将拒绝重命名任何文件,添加-f以覆盖它)。

**/*(#qD.)iszsh的带有 glob 限定符的递归 glob (其显式形式为(#q<qualifiers>)D包括隐藏文件,.仅选择常规的文件。

答案3

重击:

md5sum my.file.here | { read sum filename; mv $filename $sum; }

相关内容