Назад | Перейти на главную страницу

Мне нужно объяснить поведение bash find при использовании -newermt и -exec ls {}

У меня есть такая команда:

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 список аргументов).