Мне нужно объяснить поведение 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'
Ничего не возвращается. Из этого я делаю вывод, что наличие символической ссылки вызывает такое поведение, но я не понимаю, почему.
1 ответ
Решение
Я думаю, проблема в том, что ваш
find ... -exec ls ... {} \;
(без
-type f
в
find
список аргументов) будет запущен
ls
также для любых совпадающих каталогов, в результате
ls
перечисление всего содержимого этих каталогов (если вы не добавите
-d
вариант для
ls
список аргументов).