Linux Mint下批量递归重命名含无效字符文件的Bash命令求助
递归重命名文件及特殊文件名处理方案
一、批量递归移除文件名中?及后续内容
方法1(推荐,依赖rename命令)
这是最简洁的单行命令,适合批量处理所有带?后缀的文件:
find . -type f -name "*?*" -exec rename 's/\?.*//' {} +
- 细节说明:
find . -type f:递归遍历当前目录下的所有文件-name "*?*":筛选出文件名包含?的目标文件-exec rename 's/\?.*//' {} +:对匹配到的文件执行正则替换,移除?及其后面的所有字符
方法2(无依赖,纯Bash实现)
如果你的系统未预装rename命令,可使用以下命令:
find . -type f -name "*?*" -exec bash -c 'mv "$0" "${0%%\?*}"' {} \;
- 细节说明:
${0%%\?*}是Bash参数扩展语法,会截取文件名中第一个?之前的部分作为新文件名
二、处理index.html?C=D;O=D特殊文件名
根据需求选择以下方案:
- 方案1:移除参数,保留主文件名
mv "index.html?C=D;O=D" index.html - 方案2:保留参数并替换非法字符
若需要保留参数信息,将?和;替换为文件系统支持的下划线:mv "index.html?C=D;O=D" index.html_C=D_O=D
内容的提问来源于stack exchange,提问作者PianoTiger
相关产品推荐
相关产品推荐

