如何按主题编号(文件名前缀)对文件进行排序并从中创建新文件夹?



该目录称为Structural/,这里有所有T1扫描:

[1900140e@psych-sl04 Structural]$ ls
145951_DTI_T1.nii  
125645_DTI_T1.nii
164934_DTI_T1.nii ...

现在对于这个目录,我需要为每个主题创建一个新的子目录,如下所示:

Structural/145951/mri/orig/145951_DTI_T1.nii Structural/125645/mri/orig/125645_DTI_T1.nii

所以我需要一个以主题 ID 命名的新文件夹,在该目录中还有两个存储(重命名(文件的新子目录。

现在存储我的文件的目录:

/home/1900140e/collab/3Sites_mat/Site1/Structural/

应该的目录:

/home/1900140e/collab/3Sites_mat/Site1/Structural/<subjID>/145951/mri/orig/

任何帮助将不胜感激!

我读过有关将 mv 命令和重命名命令与正则表达式结合使用的信息,但不确定当每个文件的日期和 subjectID 不同时如何使用它,因为我不知道使用什么作为迭代器来循环文件(如果这是必要的(。

到目前为止,我尝试的包括将文件名打印到文本文件中并尝试遍历所有行以创建单独的文件夹,但我觉得应该有一种更有效的方法。

如果我理解正确,以下内容应该有效:

for i in *.nii; do
dir="${i%%_*}/mri/orig"
mkdir -p -- "$dir" && mv -- "$i" "$dir"
done

在这里,${i%%_*}扩展到i的内容,任何尾随子字符串匹配_*被切断,即它是$i到第一个下划线的值。

最新更新