我试图弄清楚如何使用 find 显示当前目录及更低目录中自当前终端会话启动以来已修改的所有文件的列表。
显然要使用递归查找,但是如何描述结果以仅显示自登录以来修改的文件?我是否要根据登录时始终修改的其他文件检查它们?有内置的方法吗?
说一些类似的话:
find . -newer 'xxxx'
其中 xxxx 是在终端会话开始时修改的某个文件。但是什么文件可以做到这一点呢?
答案1
没有可用于此目的的特定文件,但添加您自己的文件很容易。
在你.profile
或.bash_profile
任何你可以做的事情
TIMEFILE=$HOME/.lastlogin
[[ ! -f $TIMEFILE ]] && touch $TIMEFILE
find $HOME -newer $TIMEFILE
touch $TIMEFILE
该[[
行的存在是为了防止find
在文件不存在时抱怨。
编辑:啊,抱歉,我可能有点误解了你的问题。您可能想随时运行该命令,因此在这种情况下,您可以将其放在您的.bash_profile
touch $HOME/.lastlogin
现在从命令行
find $HOME -newer $HOME/.lastlogin
您可以随时通过touch
再次 ing 该文件来重置计时器。
答案2
在 Bash 中,您可以使用 来计算自登录以来已经过去的时间last
。
TIMEDIFF=$(( ( $(date --date="$(last -1 | head -n 1 | tr -s " " | cut -d" " -f3-6)" +%s) - $(date +%s) ) / 60 ))
请注意,这将产生负数。 (这对下一步很有用。)
然后将时间差与-mmin
参数添加到命令中find
:
find . -mmin $TIMEDIFF
当然你也可以把它做成单行。