基于正则表达式递归地重命名目录和文件



我试图在给定目录中剥离所有文件名中的"?"谁得到了更多的子目录,他们在其中有子目录。我尝试过使用简单的perl regex脚本进行系统调用,但它无法递归遍历每个子目录,而且手动执行会浪费太多时间。我该如何解决我的问题?

您可以使用find命令搜索包含"?"的文件名,然后使用其exec参数运行脚本,从文件名中删除"?"字符。考虑这个脚本,您可以将其保存到/usr/local/bin/rename.sh,例如(记住给它+x权限):

#!/bin/sh
mv "$1" "$(echo $1| tr -d '?')"

那么这个就可以了:

find -name "*?*" -exec rename.sh {} ;

试试这个:

find -name '*?*' -exec prename 's/?//g' {} +

参见https://metacpan.org/module/RMBARKER/File-Rename-0.06/rename.PL(这是Ubuntu发行版上默认的rename命令)

查找所有带有'?,然后把它们全部删除。可能也可以使用-exec选项,但需要额外的脚本

for f in $(find $dir -name "*?*" -a -type f) ; do
    mv $f ${f/?/}
done

最新更新