识别除某些选定目录之外的目录

识别除某些选定目录之外的目录

我正在编写 shell 脚本并遇到一个问题。如果我有一个包含目录和文件信息列表的文件,例如:

home/svdev/src/lib
home/dev/project/doc
home/server/etc
dev.dump/trunk/src
dev.dump/src/etc
etc/hosts
template.txt
admin/releases/tables

我想确定是否有任何目录或文件不以开发转储。因此,对于给定的数据,由于最后三个条目与目录条件匹配,所以我应该得到错误的作为我的输出

答案1

您可以grep为此使用:

$ cat good
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc
$

$ cat bad
home/svdev/src/lib
home/dev/project/doc
home/server/etc

dev.dump/trunk/src
dev.dump/src/etc

etc/hosts
template.txt
admin/releases/tables
$

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' good; then echo false; else echo true; fi
true

$ if grep -q -v -E '^home/|^dev\.dump/|^[[:space:]]*$' bad; then echo false; else echo true; fi
false

对于grep我使用的^home/|^dev\.dump/|^[[:space:]]*$,这意味着“搜索^以 home/ 开头 ( ) 或以 dev.dump/|开头 ( ) 的行”或可以选择包含空格字符 ( ) 的空白行。该选项导致将模式应用为扩展正则表达式。该选项反转匹配,因此它匹配与模式不匹配的行。 “好”文件将没有与反转模式匹配的行,“坏”文件将有行。该选项会导致抑制输出。^|^[[:space:]]*$-Egrep-v-qgrep

如果grep找到匹配,则以 0 退出;如果没有匹配,它将以非零值退出。我使用 shellif检查grep的退出值,并相应地打印相应的true/false字符串。

答案2

您可以尝试使用grep(1)if-statement

if grep -Evq '^(home|dev\.dump).*' file.txt ; then echo false; fi

相关内容