我想用bash重命名一堆文件,转换这个文件模式:
prefix - name - suffix.txt
进入这一个:
name.txt
为此我写了以下脚本:
find . -name "*.txt" | while read f do mv "${f}" "${f/prefix - /}" done find . -name "*.txt" | while read f do mv "${f}" "${f/ - suffix/}" done
它可以工作,但我想使用单个循环执行重命名.可能吗?
另一种方法,为了好玩,使用正则表达式:
regex='prefix - (.*) - suffix.txt' for f in *.txt; do [[ $f =~ $regex ]] && mv "$f" "${BASH_REMATCH[1]}.txt" done
实际上,在这里使用简单模式’* .txt’有两个问题:
>它太宽泛了;您可能需要将正则表达式应用于许多不匹配的文件.
>如果当前目录中有很多文件,命令行可能会溢出.
使用find会使过程变得复杂,但更正确:
find . -maxdepth 1 -regex 'prefix - .* - suffix.txt' -print0 | \ while read -d '' -r; do [[ $REPLY =~ $regex ]] && mv "$REPLY" "${BASH_REMATCH[1]}.txt" done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。