我正在使用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命令来完成类似的任务。
答案 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
这不包括a
和b
答案 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