Sim*_*mon 2 linux bash shell scripting rename
我有这样的文件结构:
因此,有8位数字的文件夹包含一个或多个文件,名称以8位数字开头.但是这些文件名 - 比方说 - 不同步.所以现在我尝试在bash中递归地重命名它们来存档:
我的脚本看起来像:
#! /bin/bash
find * -maxdepth 1 -name "*" -type d | while read -r dir
do
rename 's/$dir\/[0-9]{8}/$dir/' *
done
Run Code Online (Sandbox Code Playgroud)
但这不起作用,并给出错误
全局符号"$ dir"需要在(eval 1)第1行显式包名.
我怎么能写它来根据文件夹名重命名文件?
谢谢你的帮助!
使用"代替'在rename
你应该运行rename里面的文件$dir,所以参数rename必须是$dir/*而不仅仅是*
既然你要替换dir/8digits使用dir/dir正则表达式的更换部分应$dir\/$dir
通过上述更改,命令如下所示:
rename "s/$dir\/[0-9]{8}/$dir\/$dir/" $dir/*
Run Code Online (Sandbox Code Playgroud)