在(find命令)-BASH时排除某个目录

在(find命令)-BASH时排除某个目录,bash,Bash,这个Bash脚本遍历/app目录中的每个文件 这是树骑士团 /app _/a -/b -/test/unittest/python/test.py 问题是,我不想执行lint步骤。 如何排除测试目录? ... for file in $(find /app -name '*.py'); do filename=$(basename $file) if [[ $filename != "__init__.py" ]] ; then

这个Bash脚本遍历/app目录中的每个文件

这是树骑士团

/app
_/a
-/b
-/test/unittest/python/test.py
问题是,我不想执行lint步骤。 如何排除测试目录?

...
for file in $(find /app -name '*.py'); do
        filename=$(basename $file)
        if [[ $filename != "__init__.py" ]] ; then
                echo "$file"
                pylint "${file}" --rcfile="${lint_path}" || exit 1
        fi
done
这是一种解决问题的方法,不确定它是否正确。不行

$(find /app -name '*.py' -not -path '*test*')

使用
-prune
选项可防止降级到
测试
目录

您还可以在
查找
中排除
\uuuuu init\uuuuu.py
,因此无需使用
if
进行测试

$(find /app -type d -name test -prune -o -type f -name '*.py' ! -name '__init__.py' -print)

顺便说一句,
对于美元中的任何东西(find…
通常都是不好的做法。有关原因的解释(缩写:它将完全破坏合法的文件名),以及替代方法(特别是使用
-print0
-exec
的实践,这两种方法都可以正确传递所有可能的名称)。类似地,
文件名=$(basename$文件)
由于未加引号的扩展,其本身将使用空格或可扩展通配符来破坏名称
filename=$(basename“$file”)
更安全,尽管完全删除
basename
并使其
filename=${file##*/}
同样正确且执行速度更快;请参阅描述使用的语法。您会考虑删除命令替换语法(或者接受这样的编辑)吗?这样的话,答案就在同一个点上,但不再展示坏的做法。对我来说,这是一个超级外星人代码。但这确实有效great@Barmar先生我把我的工作从满栈换成了devops工程师。我正在努力学习bash脚本。是否有任何资源或最佳实践来学习bash脚本???对我来说,这不像python脚本编写那么简单(@JohnBaek,是一个很好的资源,正如。请参阅中的链接;我明确建议不要使用的唯一内容(实际上,可能不再存在)是TLDP中的资源。另请参阅和页面。@JohnBaek我肯定有教程,但我没有任何建议。