排除 bash 循环中的文件夹
Excluding folders in bash loop
我正在尝试编写一个脚本,将包含许多项目的 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。
find
命令周围的双引号将其输出转换为一个字符串(其中包含新行)。您正在循环匹配 *"git"*
的单个 X
值。因此,您打印 NO MATCH:
后跟完整的字符串(及其新行)。证明:在循环的开头添加 echo foobar
并看到它只打印一次。
你可以试试:
find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\*
哪个应该做你想做的(没有 NO MATCH
输出)。
我正在尝试编写一个脚本,将包含许多项目的 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。
find
命令周围的双引号将其输出转换为一个字符串(其中包含新行)。您正在循环匹配 *"git"*
的单个 X
值。因此,您打印 NO MATCH:
后跟完整的字符串(及其新行)。证明:在循环的开头添加 echo foobar
并看到它只打印一次。
你可以试试:
find . -maxdepth 2 -mindepth 2 -type d ! -path ./.git/\*
哪个应该做你想做的(没有 NO MATCH
输出)。