【问题标题】:Execute command in multiple sub-directories在多个子目录中执行命令
【发布时间】:2020-09-17 17:14:57
【问题描述】:

假设我有这样的文件夹结构

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

我需要某种 bash 脚本,该脚本将放在 code.sh 中,并在子文件夹 1、子文件夹 2、子文件夹 3、子文件夹 4 等中执行命令。但是不在子文件夹

到目前为止我只找到了这个解决方案

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'

任何帮助将不胜感激。

【问题讨论】:

标签: bash shell git-bash


【解决方案1】:

一种简单而强大的方法,使用 parameter expansion

#!/bin/bash

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

确保您与“父文件夹”目录处于同一级别。

一点解释:

  • sn-p 背后的想法是使用 glob(通配符)./*/*/.git 列出所有 .git 目录
  • ${dir%.git}bash 参数扩展,去掉.git子串
  • 子shell ( ) 不必使用cd 探索FS 到下一个目录。每次迭代都在一个新的(子)shell 中运行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    相关资源
    最近更新 更多