我正在尝试查找系统中最近 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/*" ...