在 find 命令中从变量中排除一些文件

Exclude some files from variable in find command

我想在 find 命令中排除一些文件,但效果不是很好!这是我所做的:

arg=
exclude="/etc/alternatives/awk 
    /usr/sbin/poweroff 
    /usr/bin/ls"

find $arg -type f,l,c,b -path /etc/alternatives/awk -prune -o -print

在这个例子中我只使用了一个文件 /etc/alternatives/awk 并且我不知道如何告诉脚本在我的变量中起作用 exclude.

更新:

我应该只使用这个结构吗?

find $arg -type f,l,c,b -path /usr/bin/pwd -prune -o -path /etc/alternatives/awk -prune -o -path /usr/sbin/poweroff -prune -o -path /usr/bin/ls -prune -o -print

发布的 thread 有多个 pros/cons 选项。 (最慢的)之一:

#!/bin/bash
arg=
exclude='^/etc/alternatives/awk$|^/usr/sbin/poweroff$|^/usr/bin/ls$'

find $arg -type f,l,c,b | grep -Ev "${exclude}"

或者您可以尝试使用 find 在没有 grep-ing 的情况下本地执行此操作:

#!/bin/bash
arg=
exclude='^(/etc/alternatives/awk|/usr/sbin/poweroff|/usr/bin/ls)$'

find $arg -type f,l,c,b -regextype posix-extended -not -regex "${exclude}" -print