我是编码的新手,我正在尝试遍历文件夹以查找特定文件(在每个文件夹中称为相同的文件)。我有3个文件夹(CONTROL,GROUP1和GROUP2)。每个文件夹中都有2个子文件夹,其中包含文件夹名称(2 3 4 5 6 7.每个子文件夹中都有一个文件,其中包含子文件夹名称,如2_diff.nii或3_diff.nii。我希望代码分别进入每个文件夹。文件夹,找到子文件夹,然后在那里执行文件的分析。问题是我的代码似乎在寻找每个主文件夹中的每个子文件夹,每个主文件夹只有2个子文件夹(2 3 4) 5 6 7)。非常感谢任何提示 - 谢谢!!
Folders=(CONTROL GROUP1 GROUP2)
SubFolders=(2 3 4 5 6 7)
data_source=/Users/sheena/Desktop/test/
for j in ${Folders[@]}; do
cd ${data_source}/${j}/
for i in ${SubFolders[@]}; do
fslroi ${i}_diff.nii ${i}_nodif 0 1 #I want to analyze the file <subfolder>_diff.nii and name the output as <subfolder>_nodif.nii
done
done
答案 0 :(得分:0)
我理解您的问题的方式是,在每个目录CONTROL
,GROUP1
和GROUP1
中,有2个x_diff.nii
形式的文件,其中{{1}是一个2到7之间的数字。至少我是如何阅读你的代码的。
您事先没有知道哪两个数字。
我看到的最简单方法是像你一样运行所有可能的x
,但如果它不存在,请尽早使用SubFolders
语句跳转到下一个:
continue
您可以用一行替换上面的Folders=(CONTROL GROUP1 GROUP2)
SubFolders=(2 3 4 5 6 7)
data_source=/Users/sheena/Desktop/test/
for j in ${Folders[@]}; do
cd ${data_source}/${j}/
for i in ${SubFolders[@]}; do
if [[ ! -e ${i}_diff.nii ]]; then
continue
fi
fslroi ${i}_diff.nii ${i}_nodif 0 1
done
done
子句:
if
但我发现更具表现力的 for i in ${SubFolders[@]}; do
[[ -e ${i}_diff.nii ]] || continue
fslroi ${i}_diff.nii ${i}_nodif 0 1
done
- if
块更容易阅读和理解,这也很重要。