Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 排除bash循环中的文件夹_Git_Bash_Github_Git Bash - Fatal编程技术网

Git 排除bash循环中的文件夹

Git 排除bash循环中的文件夹,git,bash,github,git-bash,Git,Bash,Github,Git Bash,我正试图编写一个脚本来分离一个GitHub回购协议,其中有许多项目都被划分为单独的回购协议,同时保留它们的git历史记录。我知道如何手工完成所有这些,但我想通过编写脚本来为我节省时间 这是我到目前为止所拥有的 剧本 #!/bin/bash REPO_DIR="C:/Users/Jerred/GitKraken/harding-computer-science/" cd "$REPO_DIR" for X in "`find . -maxdepth 2 -mindepth 2 -type d`

我正试图编写一个脚本来分离一个GitHub回购协议,其中有许多项目都被划分为单独的回购协议,同时保留它们的git历史记录。我知道如何手工完成所有这些,但我想通过编写脚本来为我节省时间

这是我到目前为止所拥有的

剧本

#!/bin/bash
REPO_DIR="C:/Users/Jerred/GitKraken/harding-computer-science/"

cd "$REPO_DIR"

for X in "`find . -maxdepth 2 -mindepth 2 -type d`"
do
    if [[ "$X" == *"git"* ]]; then
        echo "NO MATCH: $X"
        continue;
    fi
    echo "$X"
done
这工作得很好,只是它包含了.git文件夹,应该将其排除在外。由于某种原因,它不起作用

输出

NO MATCH: ./.git/hooks    // This is ignored like I want
./.git/info               // This isn't ignored but it should be
./.git/logs
./.git/objects
./.git/refs
./COMP 151 - Programming II/Lab 10 Resources
./COMP 151 - Programming II/Lab 11 Resources

我怀疑是否需要它,但这是GitHub上的。

您在
find
命令周围的双引号将其输出转换为一个字符串(其中包含新行)。您正在循环一个与
*“git”*
匹配的
X
值。因此,您可以打印
无匹配:
,后跟完整字符串(及其新行)。证明:在循环开始处添加
echo foobar
,并确保只打印一次

你可以试试:

find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\*

它应该做你想做的事情(没有
不匹配
输出)。

查找
命令周围的双引号将其输出转换为一个字符串(其中包含新行)。您正在循环一个与
*“git”*
匹配的
X
值。因此,您可以打印
无匹配:
,后跟完整字符串(及其新行)。证明:在循环开始处添加
echo foobar
,并确保只打印一次

你可以试试:

find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\*

它应该做你想要的(没有<代码>没有匹配< /代码>输出).< /p>它不回答你的问题,但是你是否考虑使用<代码>路径> /COD>选项<代码>查找< /代码>过滤<代码> git /*<代码>?尝试添加
-路径./git /\*/COD>也许是您的find命令。它不回答您的问题,但是您是否考虑使用<代码>路径> /COD>选项<代码> find <代码>过滤<代码> git /*<代码>?尝试添加
-path./.git/\*
到您的find命令,可能吧。这很有效。我没有意识到find命令周围的引号导致它输出一个字符串,但现在它是有意义的。这是可行的。我没有意识到find命令周围的引号导致它输出一个字符串,但现在它有了意义。