我有很多文件名如下的数据:
combination.2005.0801.txt
combination.2005.0802.txt
...
combination.2005.0830. txt
如果我想将该文件重命名为这样的名称,该怎么办?
20100801.txt
20100802.txt
...
20100803.txt
我已经尝试使用以下脚本,但不幸的是该脚本不起作用。
rename 's/combination.(.*).(.*).txt/$1.txt/' *.txt
答案1
当使用(Perl 兼容;或更通用,大多数)正则表达式时,您必须记住.
将匹配任何字符;不仅仅是句点(而且除非有量词,否则只有一个字符)。
以下未经测试,但我可能会尝试使用此解决方案基于这个问题和答案:
$ for old in ./combination*.txt; do
new=$(echo $old | sed -r 's/combination\.([[:digit:]]+)\.([[:digit:]]+)\.txt$/\\1\\2.txt/')
mv -v "$old" "$new"
done
请记住,这尚未经过测试,可能会出现问题。您也可以先使用echo
而不是mv
测试整个过程。:)
答案2
$ for i in combination*.txt; do
mv $i $(echo $i | awk -F\. '{print $2$3"."$4}');
done