递归重命名名称以破折号开头的所有文件

jbr*_*ock 6 command-line bash find rename

在终端中,我可以重命名以破折号开头的单个文件,即

mv ./-file file
Run Code Online (Sandbox Code Playgroud)

我还可以重命名目录中以破折号开头的所有文件,即

for f in ./-*; do rename 's/-//' "$f"; done
Run Code Online (Sandbox Code Playgroud)

但是,我怎样才能递归地做到这一点。我曾尝试使用find命令、rename命令和递归for循环。顺便说一句,很多文件名都不止一个破折号。我只想删除第一个破折号。谢谢!

mur*_*uru 11

使用findrename

find . -iname '-*' -execdir rename -n 's:./-:./:' {} +
Run Code Online (Sandbox Code Playgroud)

find . -iname '-*'匹配所有以 a 开头的文件名-,然后ing 到包含文件的目录之后-execdir ... {} +以这些文件名作为参数运行命令。这意味着命令参数始终具有. 然后很容易在正则表达式中匹配之后。 cd./-foo-./