我需要解释使用 -newermt 和 -exec ls {} 时 bash find 的行为

我需要解释使用 -newermt 和 -exec ls {} 时 bash find 的行为

我有这个命令:

find /var/cache/pkg  -newermt 2020-01-30 | grep 'kdeaccessibility-4.14.3_1'

它什么都没返回。我把它改成这样:

find /var/cache/pkg  -newermt 2020-01-30 -exec ls -D '%F' -l -t -r {} \; | grep 'kdeaccessibility-4.14.3_1'

返回结果如下:

-rw-r--r--  1 root  wheel        556 2017-07-14 kdeaccessibility-4.14.3_1-6dc124e39c.txz
lrwxr-xr-x  1 root  wheel         40 2017-07-21 kdeaccessibility-4.14.3_1.txz -> kdeaccessibility-4.14.3_1-6dc124e39c.txz

因此,该-newermt选项似乎被该-exec选项禁用。但我不明白为什么。

但是,如果我添加该-type f选项,则查找工作就会按预期进行。

find /var/cache/pkg  -type f -newermt 2020-01-30 -exec ls -D '%F' -l -t -r {} \; | grep 'kdeaccessibility-4.14.3_1'

没有返回任何内容。我由此推断,符号链接的存在导致了这种行为,但我不明白为什么。

答案1

我认为问题在于您的find ... -exec ls ... {} \;(没有-type ffind参数列表中)也会对任何匹配的目录运行ls,从而ls列出这些目录的全部内容(除非您将该-d选项添加到ls参数列表中)。

相关内容