Bash

我需要在使用 -newermt 和 -exec ls {} 時解釋 bash 查找行為

  • May 27, 2020

我有這個命令:

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'

什麼都沒有返回。我由此推斷符號連結的存在導致了這種行為,但我不明白為什麼。

我認為問題在於您的find ... -exec ls ... {} \;(不在-type f參數find列表中)ls也將針對任何匹配的目錄執行,從而ls列出這些目錄的全部內容(除非您將-d選項添加到ls參數列表中)。

引用自:https://serverfault.com/questions/1018956