我需要在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
等。
答案 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
上,文件名已按字母顺序排序。