我有一个 COCI(一项竞争性编程竞赛)的评分器,它读取输入文件(txt[number].in
),编译并运行代码(txt.cpp
),并将结果与输出文件(txt[number].out
)进行匹配。问题是,COCI 问题的输入文件具有格式(txt.in.1
)、(txt.in.2
)、(txt.in.3
)等,并且输出文件的名称也类似。
我需要将输入文件的扩展名从 更改为txt.in.[number]
。txt[number].in
(需要对输出文件执行相同的操作)
谁能帮我这个?
我目前正在使用 13.04 Ubuntu。
答案1
使用终端,我认为这是最简单的方法:
mmv -v "*.in.*" "#1#2.in"
这是一个测试:
$ ls
txt.in.1 txt.in.2 txt.in.3
$ mmv -v "*.in.*" "#1#2.in"
txt.in.1 -> txt1.in : done
txt.in.2 -> txt2.in : done
txt.in.3 -> txt3.in : done
$ ls
txt1.in txt2.in txt3.in
默认情况下,mmv
Ubuntu 中未安装,但您可以使用以下命令从终端安装它:
sudo apt-get install mmv
看man mmv
了解更多信息。
答案2
如果 afile.in.1
变成file.in.1.in
,那么这样就可以了
rename 's/$/.in/' *
如果你认为两者在很丑,那就做
rename 's/\.in(\.\d+)$/$1.in/' *
通过-n
选项来执行试运行。
答案3
该脚本将复制工作目录中与 *.in.* 匹配的所有文件
#!/bin/bash
for i in $(ls *.in.*)
do
target=$(echo ${i} | awk -F'.' '{ print $1$3"."$2 }')
cp ${i} ${target}
done
答案4
适用于您修订格式的版本rename
将是
rename -- 's/(\.in|\.out)\.(\d+)/$2$1/' *
例如
$ ls
txt.in.1 txt.in.2 txt.in.3 txt.out.1 txt.out.2 txt.out.3
$
$ rename -nv -- 's/(\.in|\.out)\.(\d+)/$2$1/' *
txt.in.1 renamed as txt1.in
txt.in.2 renamed as txt2.in
txt.in.3 renamed as txt3.in
txt.out.1 renamed as txt1.out
txt.out.2 renamed as txt2.out
txt.out.3 renamed as txt3.out