bash - 用 bash 中内容的 MD5 哈希字符串替换文件的完整文件名
问题描述
问题:
我在一个文件夹中有一堆文件,我想将它们全部重命名为文件内容的 md5。
我尝试了什么:
这是我尝试过的命令。
for i in $(find /home/admin/test -type f);do mv $i $(md5sum $i|cut -d" " -f 1);done
但这在一段时间后因错误而失败,只有一些文件被重命名,其余部分保持不变。
mv: missing destination file operand after /home/admin/test/help.txt
Try `mv --help' for more information.
实施是否正确?我在脚本中做错了什么吗?
解决方案
通过使用 shell 提供的 glob 模式而不是使用外部实用程序(如find
. 另请参阅为什么您不阅读带有“for”的行
在文件夹内导航/home/admin/test
并执行以下操作就足够了
for file in *; do
[ -f "$file" ] || continue
md5sum -- "$file" | { read sum _; mv "$file" "$sum"; }
done
尝试使用echo
inplace of mv
first 检查文件是否按预期重命名。
要转到下面的子目录,我认为这也是您的要求, enable globstar
,这是 shell 提供的扩展全局选项之一,可以更深入
shopt -s globstar
for file in **/*; do
推荐阅读
- java - 严重:开始事件引发错误 java.lang.ExceptionInInitializerError Intellij/Tomcat
- python - 如何让 PyCharm 在输出控制台中显示整个数据框?
- eiffel - Eiffel:如何设置自动测试的命令行参数?
- javascript - JavaScript 错误使用
使用 ColdFusion 2018 标记 - ios - ios 应用程序加载程序登录挂起
- laravel - Laravel Scope 查询以计算每个用户的项目类型
- graphics - 在 Vulkan 中创建统一缓冲区
- scala - Scala NetLogo Extension API:访问全局/模型参数
- node.js - 没有 NGINX 或任何其他代理的 Ubuntu 上的 Node.js 是不可取的,甚至是不可能的?
- ansible - 使用命令语法的 Ansible 复制文件