【发布时间】:2020-11-03 19:21:01
【问题描述】:
我有以下脚本:
#!/bin/bash
arg=$1
exclude='(/etc/alternatives/(awk|vim)|/usr/sbin/poweroff)$'
find $arg -type f,l,c,b -regextype posix-extended -not -regex "${exclude}" -print
我没有在每个文件的开头使用^,所以它可以从任何东西开始。但是我在每个文件的末尾都使用了$。
所以当我以这种方式运行脚本时,它可以正常工作:
$ sudo bash script.sh /etc/ | grep awk
/etc/alternatives/nawk
/etc/alternatives/nawk.1.gz
/etc/alternatives/awk.1.gz
但是当我这样做的时候是错误的:
$ sudo cp -rv /etc/ /tmp/
$ sudo bash script.sh /tmp/etc/ | grep awk
/tmp/etc/alternatives/awk
/tmp/etc/alternatives/nawk
/tmp/etc/alternatives/nawk.1.gz
/tmp/etc/alternatives/awk.1.gz
在这里您看到文件 /tmp/etc/alternatives/awk,由于缺少 ^ 符号,因此不应在结果中传递。
更新
这个模式很好用,但我想使用上面的一个:
find $arg -type f,l,c,b | grep -Ev "${exclude}"
【问题讨论】:
-
尝试将 -regextype 从 postix-extended 更改为 posix-egrep