我试图写一条bash行,它将查看我当前文件夹中的所有子目录,并告诉我是否有不包含“ .git”的行。伪:
for subdir in currentdir
if .git does not exist
print subdir
这是我正在尝试的单行代码,该行不起作用,并且似乎打印了所有子目录:
find . -maxdepth 1 -type d -execdir $SHELL -c '[ ! -d ".git" ] && echo "not git repo:" {}' $SHELL -c '{}' ';'
我找到了一些解决方案,可以让我打印出所有具有.git的子目录,就像这样-我正试图做相反的事情。
我究竟做错了什么?这可能吗?
首先,该-execdir
命令看起来很奇怪(2x $SHELL -c
?):
$SHELL -c '[ ! -d ".git" ] && echo "not git repo:" {}' $SHELL -c '{}' ';'
另外,-execdir
在包含匹配实体的目录中运行命令(因此,它正在检查的目录的父目录).
适用于所有子目录。测试在错误的目录中运行。和:
{}
在exec
/-execdir
命令中重用。$SHELL
。那是用户的登录shell,对于在脚本等中的用法没有任何特殊意义。仅在使用sh
,或bash
或者ksh
如果这些是你选择的壳,直接。这可能起作用:
find . -maxdepth 1 -type d -exec sh -c '! [ -d "$1/.git" ] && echo "not git repo: $1"' _ {} \;
该-exec
命令检查.git
传入的参数中是否存在,该参数又是每个子目录。您可能还想用来-mindepth 1
排除当前目录:
find . -maxdepth 1 -mindepth 1 -type d -exec sh -c '! [ -d "$1/.git" ] && echo "not git repo: $1"' _ {} \;
或者,仅使用bashdotglob
即可匹配隐藏目录:
(shopt -s dotglob; for d in ./*/; do [[ -d $d/.git ]] || echo "not git repo: $d"; done)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句