用 bash 中内容的 MD5 哈希字符串替换文件的完整文件名

Sai*_*ran 1 bash shell md5

问题:

我在一个文件夹中有一堆文件,我想将它们全部重命名为文件内容的 md5。

我试过的:

这是我试过的命令。

for i in $(find /home/admin/test -type f);do mv $i $(md5sum $i|cut -d" " -f 1);done
Run Code Online (Sandbox Code Playgroud)

但这在一段时间后因错误而失败,只有一些文件被重命名,其余部分保持不变。

mv: missing destination file operand after /home/admin/test/help.txt
Try `mv --help' for more information.
Run Code Online (Sandbox Code Playgroud)

实施是否正确?我在脚本中做错了什么吗?

Ini*_*ian 5

通过使用 shell 提供的 glob 模式,而不是使用像find. 另请参阅为什么您不阅读带有“for”的行

在文件夹内导航/home/admin/test并执行以下操作就足够了

for file in *; do
    [ -f "$file" ] || continue
    md5sum -- "$file" | { read sum _; mv "$file" "$sum"; }
done
Run Code Online (Sandbox Code Playgroud)

尝试使用echoinplace of mvfirst 检查一次文件是否按预期重命名。

要转到下面的子目录,我认为这也是您的要求, enable globstar,这是 shell 提供的扩展全局选项之一,可以更深入

shopt -s globstar
for file in **/*; do
Run Code Online (Sandbox Code Playgroud)