CD в ​​несколько каталогов с одинаковыми именами, выполнять команды команды в каждом, выйти и повторить в следующем каталоге - PullRequest
0 голосов
/ 02 июля 2019

Привет всем и спасибо за ваше время. Я очень новичок в написании сценариев Bash, поэтому я не знаю, как решить эту проблему. У меня есть каталог, который содержит много подкаталогов, как:

test-01
test-02
test-03
test-04
test-05
and so on..

Мне было интересно, может ли кто-нибудь показать мне, как можно зайти в каждый каталог по одному, выполнить некоторые команды, выйти из каталога и повторить процесс со следующим каталогом.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Может быть хорошее время, чтобы выучить pushd и popd!Мне нравится использовать их вместо cd в скриптах, поэтому, если что-то ломается, оно немного лучше зависит от контекста.Кроме того, после успешной работы вы вернетесь в исходный каталог.

Примечание. Камень преткновения, с которым вы можете столкнуться, - это создание «списка» каталогов.Мы можем создать этот «список», используя возможности bash для сопоставления с образцом.Например, если мы знаем, что ВСЕ каталоги, которые вы хотите включить в свой «список», должны начинаться с шаблона «test», мы можем просто добавить «test *» в ваш текущий рабочий каталог.

Давайтескажем, мой cwd это / home / ben, и здесь есть 5 директорий [test1, test2, test3, test4, test5] Чтобы создать полный список (и одновременно просмотреть этот список), мы можем просто сделать это:

for dir in /home/ben/test*; do cd ${dir}; pwd; done # Visit each dir in our little list

вывод:

/ home / ben / test1 / home / ben / test2 / home / ben / test3 / home / ben / test4 / home / ben / test5

Этот маленький фрагмент кода делает то же самое, но использует pushd и popd для просмотра списка тестовых * dirs.

for dir in /{your_path_prefix_here}/test*; do
  pushd ${dir} >/dev/null # We've arrived in this directory, and it's now in your stack. (hide the output, which displays your directory stack)

  ### Run whatever command you want, and then...  

  popd >/dev/null # Now you're right back where you were!
done
0 голосов
/ 02 июля 2019

Вы можете сделать что-то вроде этого:

for dir in /path/to/mydir/test-*/
do
  cd $dir
  // exec your command here
done

В этом случае вы используете функции глобализации оболочки, чтобы сопоставить все тестовые каталоги и цикл, используя цикл bash

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...