Группировка файлов по ветке каталога / листа - PullRequest
0 голосов
/ 06 апреля 2011

Я новичок в bash, и мне трудно обрабатывать древовидные структуры каталогов.У меня есть структура каталогов, которая выглядит следующим образом:

I/A/dataA.dat
I/B/dataB.dat
I/C/dataC.dat

II/A/dataA.dat
II/B/dataB.dat
II/C/dataC.dat

III/A/dataA.dat
III/B/dataB.dat
III/C/dataC.dat

Теперь я хочу обработать I/A/dataA.dat с помощью I/B/dataB.dat и аналогично II/A/dataA.dat с II/B/dataB.dat и т. Д. (Для каждого случая).Но я не хочу обрабатывать, например, I/A/dataA.dat с II/B/dataB.dat.

Как лучше всего найти такие пары файлов?

Iхочу передать имена найденной пары в функцию bash, например:

function process_pair()
{
  fileOne=$1; #for example II/A/data.dat
  fileTwo=$2; #for example II/B/data.dat
  //the rest of the function that processes this pair.
}

, но я не знаю, как получить переменные $1 и $2.

IВ настоящее время я использую bash и начинаю с команды dirs=find $SOURCE -type d -links 2 (чтобы найти все конечные каталоги - адаптировано из этого вопроса ).Затем я пытаюсь зациклить их (используя команды подстроки, чтобы получить каталог выше).Однако я нахожу это трудным, и я думаю, что должен быть лучший путь.

1 Ответ

1 голос
/ 06 апреля 2011

Готово в оболочке:

for dir in I II III; do
    subdirs=()
    for subdir in $dir/*; do subdirs+=("${subdir##*/}"); done
    for (( i=0 ;i<${#subdirs[*]}-1; i++ ));  do
        for (( j=i ;j<${#subdirs[*]} ;j++ ));  do
            a=${subdirs[$i]}
            b=${subdirs[$j]}
            process_pair $dir/$a/data$a.dat $dir/$b/data$b.dat
        done
    done
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...