如何使用grep从find命令的输出中忽略/排除文件?

时间:2019-04-15 11:27:31

标签: bash grep find

我正在使用find命令搜索具有某些扩展名的某些文件。我想在末尾使用grep命令来忽略某些文件。

我未完成的命令是:

find . -type f \( -name "*.txt" -or -name "*.html" -or -name "*.css" -or -name "*.js" -or -name "*.yml" \) | grep ..

比方说,我想忽略2个文件:cards.js和radios-and-checkboxes.css

如何使用grep命令实现呢?我知道有些方法可以不使用grep命令,但是我想知道如何使用grep做到这一点。

我一直在寻找不同的解决方案,但大多数解决方案都提到不包括单词或文件扩展名,或者仅使用find命令来完成类似的任务。

5 个答案:

答案 0 :(得分:1)

您要的是grep -v

 $ echo -e "a\nb\nc" | grep -v b

这会打印除b以外的所有内容

使用“ -e”排除多个匹配项,

 $ echo -e "a\nb\nc" | grep -v -e a -e b

这不包括ab

答案 1 :(得分:1)

-E中使用-v(扩展)和grep(反转匹配):

find ... | grep -v -E 'cards\.js|radios-and-checkboxes\.css'

|字符是OR运算符。

答案 2 :(得分:1)

您可以使用grep的-v标志来实现此目的。为了从结果中排除这样的一项:

your commands here | grep -v "cards.js"

如果要链接多个grep匹配,请执行以下操作:

yourcommands here | grep -v -e "cards.js" -e "radios-and-checkboxes.css"`

如果要与grep中的字符串完全匹配,请使用-w。因此,要与“ cards.js”完全匹配,请使用:grep -v -w -e "cards.js"。一次使用-w可以进行多次扩展。

答案 3 :(得分:0)

没有find的纯grep解决方案:

find . -type f \( \( -name "*.txt" -o -name "*.html" -o -name "*.css" -o -name "*.js" -o -name "*.yml" \) -a ! -name "radios-and-checkboxes.css" -a ! -name "cards.js" \)

答案 4 :(得分:0)

此脚本列出了不包括扩展名列表的文件。 当尝试发现垃圾文件时,它会有所帮助。 示例中使用了通用扩展名。 它可能更紧凑,但可读性更差。

#!/bin/bash
EXTENSIONS=$(cat <<'EOE'
.exe
.py
.js
.css
.html
EOE
)                                             # extensions, 1 per line
EXTENSIONS=$(echo "$EXTENSIONS"|tr "\n" "|")  # convert to egrep pattern
EXTENSIONS=${EXTENSIONS%?}                    # remove trailing '|'
find . -type f | egrep -i -v "$EXTENSIONS"    # all files lacking EXTENSIONS
相关问题