在 find 命令中从变量中排除一些文件
Posted
技术标签:
【中文标题】在 find 命令中从变量中排除一些文件【英文标题】:Exclude some files from variable in find command 【发布时间】:2021-02-16 03:53:35 【问题描述】:我想在 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
【问题讨论】:
可以this thread帮忙吗? 【参考方案1】:发布的thread 有多种选择,各有优缺点。 之一(最慢的):
#!/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
【讨论】:
最好使用这种模式:exclude='^/etc/alternatives/awk$|^/usr/sbin/powerof$|^/usr/bin/ls$'
egrep
已弃用,取而代之的是 grep -E
但如果任何路径包含 .
或 *
或 ?
或 [
,该 grep 命令将解释正则表达式元字符,因此 YMMV或(
或类似的 - 你真的应该使用grep -F -f '<list the paths in a file or here doc or here string or similar>'
。 @M.J ^ab$|^cd$
= ^(ab|cd)$
谢谢。你能用你提到的更好的方式重写脚本吗?甚至可以作为单独的答案
@Vgersh99 是的,就是这样! +1以上是关于在 find 命令中从变量中排除一些文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Eclipse 中从 jslint4java 中排除文件