我有一个像
这样的文件列表Ortho234.phy
Ortho671.phy
Ortho880.phy and so on
我想将它们重命名为数组作业
Ortho234.1.phy
Ortho671.2.phy
Ortho880.3.phy
我尝试了这个但是这个替换并将文件命名为1.phy,2.phy等等。
a=1
for i in *.phy; do
new=$(printf "%04d.phy" "$a")
mv -- "$i" "$new"
let a=a+1
done
答案 0 :(得分:5)
以下命令中的任何一个都可以完成您的工作
c=0 rename 's/\./sprintf(".%d.",++$ENV{c})/e' *.phy rename 's/\./".".++$a."."/e' *.phy rename '$a++; s/\./.$a./e' *.phy n=1;for f in *.phy; do mv "$f" "${f%.*}.$n.${f##*.}"; n=$((n+1)); done
<强>要么强>
它执行
perl s///
表达式,并从中执行重命名 原来的替换字符串。在我使用的替换字符串中sprintf
格式化名称,我使用环境变量c
作为 柜台
$ touch Ortho234.phy Ortho671.phy Ortho880.phy
$ ls *.phy -1
Ortho234.phy
Ortho671.phy
Ortho880.phy
$ c=0 rename 's/\./sprintf(".%d.",++$ENV{c})/e' *.phy
$ ls *.phy -1
Ortho234.1.phy
Ortho671.2.phy
Ortho880.3.phy
或强>
$ touch Ortho234.phy Ortho671.phy Ortho880.phy
$ ls *.phy -1
Ortho234.phy
Ortho671.phy
Ortho880.phy
$ n=1;for f in *.phy; do mv "$f" "${f%.*}.$n.${f##*.}"; n=$((n+1)); done
$ ls *.phy -1
Ortho234.1.phy
Ortho671.2.phy
Ortho880.3.phy
或强>
$ touch Ortho234.phy Ortho671.phy Ortho880.phy
$ ls *.phy -1
Ortho234.phy
Ortho671.phy
Ortho880.phy
$ rename 's/\./".".++$a."."/e' *.phy
$ ls *.phy -1
Ortho234.1.phy
Ortho671.2.phy
Ortho880.3.phy
或强>
$ touch Ortho234.phy Ortho671.phy Ortho880.phy
$ ls *.phy -1
Ortho234.phy
Ortho671.phy
Ortho880.phy
$ rename '$a++; s/\./.$a./e' *.phy
$ ls *.phy -1
Ortho234.1.phy
Ortho671.2.phy
Ortho880.3.phy
答案 1 :(得分:1)
这应该做的工作:
a=1
for i in *.phy; do
filepart=$(echo $i | sed 's/.phy//g')
new=$(printf "%s.%d.phy" "$filepart" "$a")
mv -- "$i" "$new"
let a=a+1
done
filepart是文件名,没有扩展名。
答案 2 :(得分:1)
int i = 0;
while (i<1)
{
//event
}
答案 3 :(得分:1)
awk
命令也有助于获得所需的输出。 NR
给出行号并在.
上拆分输入,并根据需要重写数组,如下所示
awk '{split($0,a,"."); print a[1]"."NR"."a[2]}' file
文件是包含以下值的输入文件
Ortho234.phy
Ortho671.phy
Ortho880.phy