我有一个嵌套的for循环,外循环遍历目录列表(主题文件夹),这些目录将进入每个目录的子目录并查找特定文件。找到该文件后,该目录将备份一个文件,以便使内部循环位于正确的目录中才能正常工作。然后,内部循环在主题文件夹中查找特定的子目录,输入这些子目录,并查找3个特定的文件。文件名被分配给变量,然后将其传递给Matlab函数。
#!/usr/bin/env bash
for i in *; do #subject ID
cd "/cygdrive/g/Data/2015_0197/$i/ASL_Data/T1_Processed" #enter into
specific directory
ref_img="*smoothed*" #look for specific file1
echo $ref_img
cd .. #move out of directory
for j in *ASL*; do #look for specific subdirectories
cd "/cygdrive/g/Data/2015_0197/$i/ASL_Data/$j" #cd to each
subdirectory
src_img=$i"_"$j".nii" #look for specific file2
other_img1=$i"_"$j"_PDmap.nii" #look for specific file3
other_img2=$i"_"$j"_ASL_fmap.nii" #look for specific file4
echo "2nd instance---- $ref_img"
echo $src_img
echo $other_img1
echo $other_img2
#eventually call matlab function
#matlab -nodesktop -nosplash -wait -r
#"coreg('$ref_img','$src_img','$other_img1','$other_img2'); exit;"
cd ..
done
done
在第7行,我获得了ref_img的正确文件名,但是它没有传递到嵌套的for循环中,因为第14行将简单地回显2nd instance---- *smoothed*
。我怎样才能通过该文件名?我已经研究过管道,但是由于我对Bash的新手知识,所以我不知道如何实现,甚至不合适。
答案 0 :(得分:1)
问题在于ref_img
包含通配符并保留它们。因此,当您使用它时,它将使用那些通配符。这些文件不在新目录中。因此,请更换
ref_img="*smoothed*"
使用
ref_img=$( echo *smoothed* )