经过一番搜索,我想出了这个命令:
> find . -type f \( -name "*.exe" \) | egrep -v
> 'games_1|rei|games|tor|jogos|mods|text' > 1
我想要做的是查找带有 .exe 扩展名的文件,除了包含任何这些字符串的路径,然后将结果打印到名为“1”的文件中,我将其写入可执行文件。
但是,在终端中执行时,出现以下错误,并且什么也没做:
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/2.bp.blogspot.com’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/segredoh.blogspot.com/feeds’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/4.bp.blogspot.com’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/3.bp.blogspot.com/-ux8HFQj0iuE/WQ9ywGiPXOI’: Input/output error
grep: write error: Input/output error
./encontrarsoft: error reading input file: Invalid argument
我错过了什么?
答案1
您显示的错误实际上毫无意义,因为看起来 grep 正在尝试读取文件,但您的命令不会导致这种情况。无论如何,这些错误与磁盘上有问题的文件/扇区有关,而不是您的命令,而且您也不需要, grep
所以我们可以避免这种情况。顺便说一句,不要使用,egrep
因为它已经过时了,grep -E
而是使用。
以下是如何使用单个find
命令完成您想要的操作:
find . -type f -name '*.exe' \
-not -regex '.*\(games_1\|rei\|games\|tor\|jogos\|mods\|text\).*'
这将查找名称以 结尾.exe
且其整个路径(包括名称)与任何提到的字符串都不匹配的文件。 find 的默认正则表达式语言是 Emacs 正则表达式,在这些语言中,您需要转义和,( )
以|
使它们分别具有分组和或的特殊含义。或者,您可以告诉find
样式egrep
化正则表达式并简化为:
find . -regextype egrep -type f -name '*.exe' \
-not -regex '.*(games_1|rei|games|tor|jogos|mods|text).*'
(请注意,\
这里只是为了换行以避免水平滚动;命令可以直接按原样复制/粘贴到终端中,但您也可以在一行上完成整个操作。)