Выполнить команду в нескольких подкаталогах - PullRequest
0 голосов
/ 30 мая 2020

Предположим, у меня есть такая структура папок

- Parent Folder/
       - code.sh
       - Child Folder 1/
             - Child Sub-Folder/
       - Child Folder 2/
       - Child Folder 3/
       - Child Folder 4/

Мне нужен какой-то сценарий bash, который будет помещен в код. sh и выполнит команду в дочерней папке 1 , Дочерняя папка 2, Дочерняя папка 3, Дочерняя папка 4 и т. Д. c. Но не в Дочерняя подпапка

Пока я нашел только это решение

find ./* -mindepth 0 -maxdepth 0 -type d -exec git add -A {} \;

Дайте мне эту ошибку

fatal: not a git repository (or any of the parent directories): .git

Когда я попробую это

find ./* -mindepth 0 -maxdepth 0 -type d -exec git add -A && git commit -m "My Message"{} \;

Дайте мне эту ошибку

find: missing argument to `-exec'

Любая помощь будет очень признателен.

1 Ответ

0 голосов
/ 30 мая 2020

Простой и надежный подход, использующий расширение параметра :

#!/bin/bash

for dir in ./*/*/.git; do
    (
        cd "${dir%.git}"
        git add -A && git commit -m "My Message"
    )
done

Убедитесь, что вы на одном уровне чем каталог "Родительская папка".

Небольшие пояснения:

  • идея, лежащая в основе сниппета, состоит в том, чтобы перечислить все каталоги .git с помощью glob ( подстановочный знак) ./*/*/.git
  • ${dir%.git} bash расширение параметра , удаление .git подстрока
  • подоболочка ( ) для того, чтобы не исследовать FS с cd до следующего реж. Каждая итерация запускается в новой (под) оболочке
...