У меня в каталоге данных есть три подкаталога, и каждый подкаталог имеет три разных подкаталога. И мне нужно прочитать два разных файла из последнего подкаталога. Как я могу это сделать?
Я пробовал это, используя приведенный ниже код, и я не могу перемещаться по всем подкаталогам.
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
Ниже приводится организация папок.
Кто-нибудь может мне с этим помочь?
Спасибо, Ананд.
Это немного проще, если вы не пытаетесь сделать это cd
. Есть смысл попробовать, но это просто немного запутано, когда вам нужно определить, где вы находитесь в сценарии; все время перемещать каталоги вверх / вниз.
Я бы порекомендовал вместо этого создать пути к файлам, которые вам нужно искать, а затем с помощью найти
в этих каталогах без перемещения. Например:
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
и файл1, имена файла2). Надеюсь, это поможет.