在终端中我可以重命名以破折号开头的单个文件,即
mv ./-file file
我还可以重命名目录中以破折号开头的所有文件,即
for f in ./-*; do rename 's/-//' "$f"; done
但是,我该如何递归地执行此操作。我尝试使用命令find
、rename
命令和递归for
循环。顺便说一句,很多文件名都有多个破折号。我只想删除第一个破折号。谢谢!
答案1
使用find
和rename
:
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