首页 > 解决方案 > 在 find 命令中从变量中排除一些文件

问题描述

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

arg=$1
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

标签: bashfor-loopawksedfind

解决方案


发布的线程有多种选择,各有优缺点。之一(最慢的):

#!/bin/bash
arg=$1
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=$1
exclude='^(/etc/alternatives/awk|/usr/sbin/poweroff|/usr/bin/ls)$'

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

推荐阅读