我的列表命名代码有什么问题?

时间:2016-02-15 07:56:47

标签: bash filenames long-filenames short-filenames

我想将文件名从Sub****_Ses1更改为HU_TT_12_****_UU; (****编号从0001到1600)

我做了以下

#!/bin/sh
#Change file name 

Subj_id=/Users/dave/biomark/dat

cd Subj_id

for abcd in Sub****_Ses1; do

mv Sub$a$b$c$d_Ses1 HU_TT_12_$a$b$c$d_UU;

done

2 个答案:

答案 0 :(得分:1)

for和通配符不会像这样工作。使用cut提取数字。

$ touch Sub000{1,2,3,4}_Ses1 
$ for f in Sub????_Ses1      
do
    abcd=$(echo $f | cut -b4-7)
    mv $f HU_TT_12_${abcd}_UU
done
$ ls HU_TT_12_000*
HU_TT_12_0001_UU  HU_TT_12_0002_UU  HU_TT_12_0003_UU  HU_TT_12_0004_UU

答案 1 :(得分:1)

您可以使用sed和mv

       #!/bin/bash
       set -x
       Subj_id=/Users/dave/biomark/dat
       cd $Subj_id

       for i in Sub*_Ses1 ; do
       #echo $i|sed -r 's/^.*\([[:digit:]]{4}\).*/HU_TT_12_\1_UU/'
       mv $i $(echo $i|sed -rn 's/^.*([[:digit:]]{4}).*/HU_TT_12_\1_UU/ p')
       done