0

我正在尝试剥离所有“?” 在给定目录中的文件名中,谁有更多的子目录,并且在其中有子目录。我尝试过使用带有系统调用的简单 perl 正则表达式脚本,但它无法递归每个子目录,手动操作会浪费太多时间。我该如何解决我的问题?

4

3 回答 3

1

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

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

然后这将完成这项工作:

find -name "*\?*" -exec rename.sh {} \;
于 2013-02-27T22:28:38.840 回答
0

试试这个 :

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

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

于 2013-02-27T22:29:32.843 回答
0

查找所有带有“?”的名称 并删除所有这些。可能 -exec 选项也可以使用,但需要额外的脚本

for f in $(find $dir -name "*?*" -a -type f) ; do
    mv $f ${f/?/}
done
于 2013-02-27T23:54:08.063 回答