使用bash在不同的文件夹中动态执行函数

使用bash在不同的文件夹中动态执行函数,bash,sh,Bash,Sh,我有两个文件夹:control和patients都有几个文件夹,每个文件夹都属于一个个人 我想做两件事: 在文件夹内为每个人创建一个名为cortical_maks的新文件夹,在该文件夹内再创建三个名为acumebens、putamen、caudate 在每个单独的文件夹中,都有img格式的图像,我想使用功能fslchfiletype将其转换为nii.gz 这就是我到目前为止所做的: DIR="/media/Roy"; cd "$DIR/Analysis&qu

我有两个文件夹:
control
patients
都有几个文件夹,每个文件夹都属于一个
个人

我想做两件事:

  • 在文件夹内为每个人创建一个名为
    cortical_maks
    的新文件夹,在该文件夹内再创建三个名为
    acumebens、putamen、caudate

  • 在每个单独的文件夹中,都有
    img
    格式的图像,我想使用功能
    fslchfiletype
    将其转换为
    nii.gz

这就是我到目前为止所做的:

DIR="/media/Roy"; cd "$DIR/Analysis"
for group in Controls Patients; do
    for case in $group/*; do
        [ -d $case ] || continue #if its not a folder
        mkdir $DIR/Analysis/$case/Cortical_masks  && cd $_
        mkdir accumbens putamen caudate
            
        for file in $DIR/Analysis/$case/ROIS2/rs_roi/*.img; do
        fslchfiletype NIFTI_GZ "$file"
        done;
    done;
done;  
这段代码有两个问题

  • 第二次运行时,将在主文件夹中创建文件夹
    cortical masks
    ,即
    controls
    patients
    ,也就是说,在它应该工作的文件夹之外

  • 此外,它一次只将一个文件夹的
    img
    转换为
    niig.gz
    。第一次执行脚本时,将IMG转换为属于第一个人的文件夹,等等

问题01:

第二次运行时,将在主文件夹(即控件和患者)中创建文件夹。如果已经有同名文件夹,我希望它不会创建新文件夹

我建议您在运行代码之前使用if循环来验证文件夹U掩码是否存在:

#check if the folder exist, if yes = true so we add ! caracter to have the opposite
if [ ! -d "$DIR/Analysis/$case/Cortical_masks" ] 
then
      #Your code
fi
问题02:

此外,它一次只将一个文件夹的img转换为niig.gz。第一次执行脚本时,将IMG转换为属于第一个人的文件夹,等等

如果您想同时执行两个操作,为什么不创建两个bash脚本并同时执行它们呢?或者,您可以通过在操作系统中创建一个流程来自动执行脚本。

问题01:

第二次运行时,将在主文件夹(即控件和患者)中创建文件夹。如果已经有同名文件夹,我希望它不会创建新文件夹

我建议您在运行代码之前使用if循环来验证文件夹U掩码是否存在:

#check if the folder exist, if yes = true so we add ! caracter to have the opposite
if [ ! -d "$DIR/Analysis/$case/Cortical_masks" ] 
then
      #Your code
fi
问题02:

此外,它一次只将一个文件夹的img转换为niig.gz。第一次执行脚本时,将IMG转换为属于第一个人的文件夹,等等

如果您想同时执行两个操作,为什么不创建两个bash脚本并同时执行它们呢?或者,您可以通过在操作系统中创建一个进程来自动执行这些脚本。

尝试将代码粘贴到中,尝试将代码粘贴到中