如何从具有许多子文件夹的文件夹中读取文件

如何从具有许多子文件夹的文件夹中读取文件

我有一个数据目录,它有三个子目录,每个子目录又有三个不同的子目录。我需要从最后一个子目录中读取两个不同的文件。我该如何实现呢?

我尝试使用下面的代码,但无法浏览所有子目录。

cd $datadir

for dirs in *;

    do

    cd $dirs

    
        for folders in *; 

            do 

            echo $folders; 


            file1=$(find "$folders" -name '*regADNI.nii.gz');
            file2=$(find "$folders" -name '*0.25mm-Crop.nii.gz');

            echo $file1
            echo $file2 

            fname=$(echo "$file1" | sed 's|\(.*\)/.*|\1|');
            #echo $fname

            echo "***************"
            
        done

    cd .
    pwd

以下是文件夹组织

在此处输入图片描述

谁能帮我这个?

谢谢 Anandh。

答案1

如果您在尝试执行此操作时不cd在场,这会更容易一些。尝试一下是有意义的,但当您需要管理脚本中的位置时,它会变得有点混乱;一直在上下移动目录。

我建议你先建立需要搜索的文件路径,然后find在这些目录上直接使用而不移动。例如:


for topDir in $(ls -d ./a*/); do
    for subDir in $(ls -d $topDir*/); do
        for leafDir in $(ls -d $subDir*/); do
            echo "Dir  : $leafDir"
            file1=$(find "$leafDir" -name '1.gz')
            file2=$(find "$leafDir" -name '2.gz')
            echo "Files:" $file1 $file2
        done
    done
done

上述脚本执行 3 次循环,直接根据每个先前目录中的目录列表构建要搜索的目录。在以下目录结构上执行:

justin@mal:~$ tree a
a
├── a
│   ├── a
│   │   ├── 1.gz
│   │   └── 2.gz
│   ├── b
│   │   ├── 1.gz
│   │   └── 2.gz
│   └── c
├── b
│   ├── a
│   │   ├── 1.gz
│   │   └── 2.gz
│   ├── b
│   │   └── 1.gz
│   └── c
│       ├── 1.gz
│       └── 2.gz
└── c
    ├── a
    ├── b
    └── c
        ├── 1.gz
        └── 2.gz

12 directories, 11 files

给出

justin@mal:~$ bash script 
Dir  : ./a/a/a/
Files: ./a/a/a/1.gz ./a/a/a/2.gz
Dir  : ./a/a/b/
Files: ./a/a/b/1.gz ./a/a/b/2.gz
Dir  : ./a/a/c/
Files:
Dir  : ./a/b/a/
Files: ./a/b/a/1.gz ./a/b/a/2.gz
Dir  : ./a/b/b/
Files: ./a/b/b/1.gz
Dir  : ./a/b/c/
Files: ./a/b/c/1.gz ./a/b/c/2.gz
Dir  : ./a/c/a/
Files:
Dir  : ./a/c/b/
Files:
Dir  : ./a/c/c/
Files: ./a/c/c/1.gz ./a/c/c/2.gz

您应该能够轻松适应您的特定顶级目录名称和文件名结构(切换顶级a文件夹和 file1、file2 名称)。希望这对您有所帮助。

相关内容