Linux 如何按主题编号(文件名前缀)对文件进行排序并从中创建新文件夹?
该目录名为Structural/这里我有所有T1扫描:Linux 如何按主题编号(文件名前缀)对文件进行排序并从中创建新文件夹?,linux,Linux,该目录名为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
[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
应为的目录:
/home/1900140e/collab/3Sites_mat/Site1/Structural/<subjID>/145951/mri/orig/
/home/1900140e/collab/3Sites\u mat/Site1/Structural//145951/mri/orig/
任何帮助都将不胜感激
我读过关于将mv命令和rename命令与正则表达式结合使用的内容,但不确定在每个文件的日期和主题不同时如何使用它,因为我不知道使用什么作为迭代器来循环文件(如果有必要的话)
到目前为止,我所做的尝试包括将文件名打印到文本文件中,并尝试循环所有行以创建单独的文件夹,但我觉得应该有一种更有效的方法来实现这一点。如果我正确理解您的意思,以下方法应该可以工作:
用于*.nii中的i;做
dir=“${i%%.*}/mri/orig”
mkdir-p--“$dir”和&mv--“$i”$dir”
完成
这里
${i%%
到i
的内容,任何尾随子串匹配\*
都被截断,即它是$i
的值,直到第一个下划线。第一个:对于*.mat中的i;执行mv-vf“$i”“${i#?????”;完成
。这在Unix shellscripting中是一件小事。对于基本的Unix shellscripting,您可以找到。谢谢!此命令中的#是否删除其后面指定的每个字符?试着去了解它的功能,这样我就可以把它应用到其他事情上了!否。“${i##?????\u}”
删除环境变量i
开头的前8个字符和“
”,但仅当其第9个字符是“
”时。你的问题是,这不是一个问题,这是一个“为我写这个脚本”的要求。是的,这就是诀窍!谢谢你的解释,如果这是一个愚蠢的问题,很抱歉,我对bash脚本非常陌生:)@MerelvanHoogdalem将来,我建议使用bash
标记来回答有关bash脚本的问题,而不是linux
或mate
:-)
/home/1900140e/collab/3Sites_mat/Site1/Structural/<subjID>/145951/mri/orig/