我有很多文件(在单个目录中),如:
[a]File-. abc'.d -001[xxx].txt
所以有很多空格,撇号,括号和句号。它们之间的唯一区别是代替001
的数字和代替xxx
的字母。
如何删除中间部分,所以剩下的就是
[a]File-001[xxx].txt
我想解释一下这些代码是如何工作的,所以我可以将其用于其他用途,并希望能帮助回答其他类似的问题。
答案 0 :(得分:2)
如果您拥有属于Perl发行版的rename
(又名prename
)实用程序,您可以说:
rename -n 's/([^-]*-).*-(.*)/$1$2/' *.txt
以所需格式重命名所有txt文件。上面的-n
不执行实际的重命名,只有告诉你如果没有指定它会做什么。 (要执行实际重命名,请从上面的命令中删除-n
。)
例如,这会重命名文件
[a]File-. abc'.d -001[xxx].txt
作为
[a]File-001[xxx].txt
关于解释,这会将第一个-
的部分捕获到一个组中,将第二个(或最后一个)之后的部分捕获到另一个组合中并将它们组合起来。
了解Regular Expressions。如果您的系统上有可用的perl文档,请说perldoc perlre
应该有帮助。
答案 1 :(得分:2)
以下是纯bash
中的简单脚本:
for f in *; do # for all entries in the current directory
if [ -f "$f" ]; then # if the entry is a regular file (i.e. not a directory)
mv "$f" "${f/-*-/-}" # rename it by removing everything between two dashes
# and the dashes, and replace the removed part
# with a single dash
fi
done
在 3.5.3 Shell参数扩展
一章中,bash手册(命令为"${f/-*-/-}"
)中描述了info bash
表达式中的魔术。
脚本第一行中的*
模式可以替换为可以帮助缩小要重命名的文件列表的任何内容,例如: *.txt
,*File*.txt
等