Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何按主题编号(文件名前缀)对文件进行排序并从中创建新文件夹?_Linux - Fatal编程技术网

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

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

该目录名为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 应为的目录:

/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/