Bash
我需要在使用 -newermt 和 -exec ls {} 時解釋 bash 查找行為
我有這個命令:
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
參數列表中)。