我有一个数据目录,它有三个子目录,每个子目录又有三个不同的子目录。我需要从最后一个子目录中读取两个不同的文件。我该如何实现呢?
我尝试使用下面的代码,但无法浏览所有子目录。
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 名称)。希望这对您有所帮助。