用于更改文件名的脚本

use*_*427 8 awk sed echo

我是awk和shell编程的新手.我有一堆文件名file_0001.dat,file_0002.dat......file_1000.dat.我想更改文件名,例如file_之后的数字与之前的文件名相比将是4的倍数.所以我想改变

file_0001.dat to file_0004.dat
file_0002.dat to file_0008.dat 
Run Code Online (Sandbox Code Playgroud)

等等.

任何人都可以建议一个简单的脚本来做它.我尝试了以下但没有任何成功.

#!/bin/bash
a=$(echo $1 sed -e 's:file_::g' -e 's:.dat::g')
b=$(echo "${a}*4" | bc)
shuf file_${a}.dat > file_${b}.dat
Run Code Online (Sandbox Code Playgroud)

Jac*_*ski 2

这个脚本将为你完成这个技巧:

#!/bin/bash
for i in `ls -r *.dat`; do
    a=`echo $i | sed 's/file_//g' | sed 's/\.dat//g'`
    almost_b=`bc -l <<< "$a*4"`
    b=`printf "%04d" $almost_b`
    rename "s/$a/$b/g" $i
done
Run Code Online (Sandbox Code Playgroud)

之前的文件:

文件_0001.dat 文件_0002.dat

第一次执行后的文件:

文件_0004.dat 文件_0008.dat

第二次执行后的文件:

文件_0016.dat 文件_0032.dat