【问题标题】:order filenames according to numbers in them, in bash在 bash 中根据其中的数字对文件名进行排序
【发布时间】:2016-02-27 07:02:45
【问题描述】:

我需要在 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 等等。

【问题讨论】:

    标签: bash filenames renaming


    【解决方案1】:

    您可以在bash 中使用此循环,使用process substitution

    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 会给出已经按字母顺序排序的文件名。

    【讨论】:

      猜你喜欢
      • 2016-04-08
      • 2012-11-01
      • 1970-01-01
      • 2020-04-01
      • 2015-11-13
      • 1970-01-01
      • 2022-08-19
      • 2021-01-23
      • 1970-01-01
      相关资源
      最近更新 更多