根据bash中的数字命令文件名

时间:2015-11-24 17:46:43

标签: bash filenames renaming

我需要在bash中将一堆文件转换为不同的格式。我的文件名是这样的:

file_STUDY_6.nii
file_STUDY_7.nii
file_STUDY_8.nii

但它们并不总是以6开头,所以我需要灵活。我希望能够找到包含“STUDY”的所有文件,并能够将最低#(此处为6)的文件重命名为study_run1

我知道我可以通过执行以下操作来访问这些文件:

for files in *STUDY*.nii; do
    echo files
done

但我不确定如何命名第一个study_run1,第二个study_run2等。

1 个答案:

答案 0 :(得分:1)

您可以使用process substitution

bash中使用此循环
i=0    
while read -r f; do
   echo mv "$f" "study_run$((++i))"
done < <(printf "%s\n" *STUDY*.nii | sort -t_ -nk3)

<强>输出:

mv file_STUDY_6.nii study_run1
mv file_STUDY_7.nii study_run2
mv file_STUDY_8.nii study_run3

验证完成后,您可以从上面的脚本中删除echo

PS:在许多系统printf "%s\n" *STUDY*.nii上,文件名已按字母顺序排序。