Linux批量重命名文件:删除|及之前的所有文本
批量重命名:删除文件名中竖线及其之前的内容
为啥你原来的命令失败?
你之前的命令里,-exec后面的|被shell当成了管道命令,根本没传递给bash脚本,属于语法错误。另外要注意:文件名里的竖线可能是半角|或全角¦,两种符号的匹配规则不一样,得对应调整。
正确的批量重命名命令
情况1:文件名含半角竖线|
这条命令会递归处理所有子文件夹里的目标文件:
find . -type f -name "*|*" -exec bash -c ' for f do # 提取竖线之后的文件名部分 new_name="${f##*|}" # 保留原目录路径,只修改文件名 mv -- "$f" "${f%/*}/$new_name" done ' sh {} +
情况2:文件名含全角竖线¦
如果实际是全角符号,把命令里的|替换成¦即可:
find . -type f -name "*¦*" -exec bash -c ' for f do new_name="${f##*¦}" mv -- "$f" "${f%/*}/$new_name" done ' sh {} +
命令关键部分说明
find . -type f -name "*|*":递归扫描当前目录及所有子文件夹,找出包含目标竖线的文件${f##*|}:贪婪匹配删除最后一个竖线及之前的所有字符,只保留竖线后的文件名内容${f%/*}/$new_name:确保文件留在原文件夹中,不会被移动到当前工作目录mv --:避免文件名以-开头时被当成命令选项处理,防止报错
内容的提问来源于stack exchange,提问作者isp
相关产品推荐
相关产品推荐

