在BASH中对特定文件的文件夹进行迭代

时间:2016-04-29 00:49:35

标签: bash

我是编码的新手,我正在尝试遍历文件夹以查找特定文件(在每个文件夹中称为相同的文件)。我有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

1 个答案:

答案 0 :(得分:0)

我理解您的问题的方式是,在每个目录CONTROLGROUP1GROUP1中,有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块更容易阅读和理解,这也很重要。