我正在尝试编写一个脚本,将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。
答案 0 :(得分:3)
围绕find
命令的双引号将其输出转换为一个单独的字符串(其中包含新行)。您正在遍历与X
匹配的单个*"git"*
值。因此,您打印NO MATCH:
后跟完整字符串(带有新行)。证明:在循环开头添加echo foobar
,看它只打印一次。
你可以尝试:
find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\*
哪个应该做你想要的(没有NO MATCH
输出)。