Все файлы в том же каталоге? Затем можно использовать простой цикл плюс конструкции обработки строк оболочки.
for flac_dir in *Pantera*'[flac]'/; do
flac_dir=${flac_dir%/}
mp3_dir="${x%\[flac\]}[mp3]"
mkdir "$mp3_dir"
done
Если Вы хотите действовать рекурсивно в подкаталогах также под zsh, или под ударом ≥4, можно использовать for flac_dir in **/*Pantera*'[flac]'/
. С ударом необходимо работать shopt -s globstar
сначала.
Я не нашел способа настроить мерзавца на этом четвертом уровне. Единственный путь, кажется, использование переопределений значения конфигурации на команду git -c key=value
.
Мое текущее hacky решение состоит в том, чтобы определить функцию оболочки, которая служит оберткой для мерзавца. При вызове это передает аргументы на системную команду мерзавца, но не прежде, чем проверить существующий рабочий каталог и добавить дополнительный аргумент команде если применимо.
function git () {
case "$PWD" in
/path/to/repos/*)
command git -c user.email=alternate@credentials.org "$@"
;;
*)
command git "$@"
;;
esac
}
Можно настроить адрес электронной почты для мерзавца с переменной среды GIT_AUTHOR_EMAIL
. Если Вы объединяетесь, это с Выполняет сценарии удара при вводе каталога или каталога определенная конфигурация оболочки с zsh, можно легко изменить настройки на каталог или родительский каталог, например, если Вы вводите в каталог в ~/work
можно автоматически скорректировать переменные среды для изменения адреса электронной почты.
Основываясь на ответе Калеба, мы можем определить модифицированную команду git
, которая навсегда настроит все репозитории в этом каталоге правильно, так что все будущие использования ванильного git будут использовать новую конфигурацию. Я использую hub
, который является еще одной оберткой git, поэтому я заменил свой alias git=hub
на этот и вызвал hub
в своей функции - если вы не используете hub
, замените все вызовы hub
на command git
:
function git() {
case "$PWD" in
/home/robin/git/3RD_PARTY)
hub "$@"
# We don't know which repository was cloned / operated on, so let's just reconfigure them all
for f in *; do
[[ -d "$f" ]] && hub -C "$f" config user.email $my_private_email
done
;;
/home/robin/git/3RD_PARTY/*)
hub "$@"
hub config user.email $my_private_email
;;
*)
hub "$@"
;;
esac
}
В отличие от ответа Калеба, который работает только в командной оболочке (и если не указано явно, только в интерактивной оболочке), это также влияет на другие git front-end'ы, которые правильно читают git config, такие как emacs magit.
См. это решение на основе конфигурации git:
https://dzone.com/articles/how-to-use-gitconfigs-includeif
Добавить в файл «~/.gitconfig»:
[includeIf "gitdir:~/work/project1/.git"]
path =.gitconfig-project1
Создайте файл «~/.gitconfig -project1» с содержимым:
[core]
sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"
[user]
name = user1
email = user1@email.com
All of the repositories in question are located under a certain path prefix on my local system. Is there a way to set a configuration value somewhere that will be inherited by all repositories under that path?
Да, используйтеgit config
условное включение:
; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
path = /path/to/foo.inc
Обратите внимание, что последняя косая черта в конце gitdir обязательна.
Для проверки работоспособности:
cd ~/to/group/some-checkout
git config --show-origin
command git -c user.email=alternate@credentials.org user.name="Alter Ego" "$@"
или как я должен пойти об этом? Искавший высоко и низко и единственная ссылка на этот флаг-c я нашел, было Вашим, спасибо, очень ценившее. – Vic Goldfeld 28.01.2013, 19:36command git -c user.email=alternate@credentials.org -c user.name="Alter Ego" "$@"
– Vic Goldfeld 28.01.2013, 20:07