问题:
我在一个文件夹中有一堆文件,我想将它们全部重命名为文件内容的 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)
实施是否正确?我在脚本中做错了什么吗?
通过使用 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)