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

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

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

sudo find / -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more

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

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


编辑:-

我修改了上述命令以包括名称newline,然后添加Arronical 的回答并αғsнιη's答案是。最终结果是:

sudo find / ! -path '*/proc*' -type f -mmin -120 -exec ls -al {} \; | grep -v anystring | less

答案1

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

sudo find / -mmin -120 -printf '%T@ %p\n' | grep -v '^/proc' | sort -n | cut -f2- -d" " | more

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

find: â?~/proc/22232/fdinfo/5â?T: No such file or directory

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

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

更好的方法

您可以更改 find 命令以使其永远不会查找以下内容,而不是过滤结果并删除错误消息/proc

sudo find / -not -path '/proc/*' -mmin -120 -printf '%T@ %p\n' | sort -n | cut -f2- -d" " | more

答案2

我会用-prune它来做这种事

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

答案3

您可以按如下方式排除“/proc”路径,

[sudo] find / ! -path "/proc" ...

要排除任何路径级别的“proc”条目,请使用如下方法

[sudo] find / ! -path "*/proc/*" ...

相关内容