如何从包含特定字符串的输出中删除行?

Rap*_*ael 5 command-line

我试图在我的系统中找到最近 2 小时左右的最新修改文件。我正在使用的命令是:

sudo find / -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more
Run Code Online (Sandbox Code Playgroud)

但是上面的命令输出了很多包含字符串的条目/proc。那么,有没有更好的方法可以从输出中删除这些行?

另外,如果您有更好的方法来处理上述情况,请提出建议。唯一的标准是输出应包含文件和目录。


编辑:-

我修改了上面的命令以包含带有 的名称newline,然后添加了Arronical 的答案和??s??? 的答案。最后的结果是:

sudo find / ! -path '*/proc*' -type f -mmin -120 -exec ls -al {} \; | grep -v anystring | less
Run Code Online (Sandbox Code Playgroud)

Arr*_*cal 10

您可以使用grep -v删除包含字符串的行,例如 '/proc',您可以将其作为管道添加到您的命令中以进行:

sudo find / -mmin -120 -printf '%T@ %p\n' | grep -v '^/proc' | sort -n | cut -f2- -d" " | more
Run Code Online (Sandbox Code Playgroud)

但是,由于文件/proc/本质上是暂时的,您可能会遇到一些错误,例如

find: â?~/proc/22232/fdinfo/5â?T: No such file or directory
Run Code Online (Sandbox Code Playgroud)

您可以通过将 find 命令的 STDERR 重定向到/dev/nullusing来避免这些,2>/dev/null如下所示:

sudo find / -mmin -120 -printf '%T@ %p\n' 2>/dev/null | grep -v '^/proc' | sort -n | cut -f2- -d" " | more
Run Code Online (Sandbox Code Playgroud)

更好的方法

与其过滤结果并删除错误消息,不如更改您的 find 命令,使其永远不会查找/proc

sudo find / -not -path '/proc/*' -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 5

我会用-prune这种东西,例如

find / \( -path /proc -o -path /sys -o -path /run \) -prune -o -mmin -120 -printf '%T@ %p\n'
Run Code Online (Sandbox Code Playgroud)