【发布时间】:2019-10-08 07:54:27
【问题描述】:
这个 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*')
【问题讨论】:
-
顺便说一句,
for anything in $(find ...)一般来说是不好的做法。请参阅DontReadLinesWithFor 了解原因(简短形式:它会破坏完全合法的文件名),以及UsingFind 以了解替代方案(特别是使用-print0或-exec的那些做法,两者都可以通过所有可能的名称正确)。 -
类似地,
filename=$(basename $file)本身会因为未加引号的扩展而使用空格或可扩展的通配符来破坏名称。filename=$(basename "$file")更安全,尽管完全删除basename并使其成为filename=${file##*/}同样正确且执行速度更快;请参阅 BashFAQ #100 描述使用的语法。
标签: bash