在bash循环中排除文件夹

时间:2017-09-07 06:34:48

标签: 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`"
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上的repo

1 个答案:

答案 0 :(得分:3)

围绕find命令的双引号将其输出转换为一个单独的字符串(其中包含新行)。您正在遍历与X匹配的单个*"git"*值。因此,您打印NO MATCH:后跟完整字符串(带有新行)。证明:在循环开头添加echo foobar,看它只打印一次。

你可以尝试:

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

哪个应该做你想要的(没有NO MATCH输出)。