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

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

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

mv ./-file file

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

for f in ./-*; do rename 's/-//' "$f"; done

但是,我该如何递归地执行此操作。我尝试使用命令findrename命令和递归for循环。顺便说一句,很多文件名都有多个破折号。我只想删除第一个破折号。谢谢!

答案1

使用findrename

find . -iname '-*' -execdir rename -n 's:./-:./:' {} +

find . -iname '-*'匹配所有以 开头的文件名-,然后-execdir ... {} +使用这些文件名作为参数运行命令, cd进入包含文件的目录。这意味着命令参数始终具有以下形式的文件名。然后,只需在正则表达式中匹配后面的./-foo就很容易了。-./

答案2

我想这也应该有效

for i in $(find . -iname '-*') ; do mv $i $(echo $i | sed -e "s/-//"); done

相关内容