Есть ли способ рекурсивно искать во вложенных подкаталогах и выполнять команду для каждого из них?

Я не смог найти вопрос, связанный с вложенными подкаталогами. Скажем, у меня есть структура каталога, подобная этой:

dir1
 |--dir2
 |    |--a
 |    |--b
 |    |--c
 |--dir3
 |    |--dir4
 |    |--file1
 |    |--file2
 |    |--file3
 |    |--dir5
 |        |--test1
 |        |--test2
 |        |--test3
 |--dir6
 |   |--fileA
 |   |--dir7
 |       |--fileB

Скажем, мне пришлось выполнить ряд команд в каждом из этих каталогов и в каждом подкаталоге. Вот схема того, что мне нужно, чтобы моя функция делала:

  • CD в ​​подкаталог, если он есть в текущем рабочем каталоге
  • Проверьте, есть ли какие-либо подкаталоги в новом каталоге.
  • Если нет, выполните функцию, в противном случае перейдите в следующий подкаталог.
  • Если больше нет подкаталогов для перехода и функция завершена, вернитесь обратно в предыдущий каталог и найдите следующий подкаталог, и повторяйте этот процесс до тех пор, пока в каждом подкаталоге под dir1 не будет выполнена функция.

Может ли кто-нибудь предоставить мне функцию сценария Bash, которая сделает это? Я полный новичок, и эта часть моего задания доставляет мне больше всего хлопот. Заранее спасибо за помощь!


person Alex    schedule 21.10.2020    source источник
comment
Вы пробовали искать в Google bash recursive directory traversal? много хитов, подобных этому: BASH : Написание сценария для рекурсивного перемещения по каталогу из N уровней   -  person markp-fuso    schedule 21.10.2020


Ответы (1)


Рекурсивная функция, это то, что вы ищете?

#!/bin/bash

function loop {

    for dir in */; do # */ to matach only directories
        if [ -d "$dir" ]; then # check if directory has further directoies
            (cd "$dir" && pwd && loop); # replace pwd with the command to be executed in the directory
        fi 
    done
}

loop
person charly1212    schedule 21.10.2020