Различные результаты с опцией поиска и -mtime + 7 * 365 - PullRequest
0 голосов
/ 10 июня 2019

Я перемещаю некоторые сценарии из AIX в RHEL и обнаружил команду поиска следующего формата:

find -mtime +7*365

Кто-нибудь испытывал синтаксис, подобный приведенному выше?

Замена 7 * 365 на 2555 дает разные результаты. И да, я не могу отследить оригинального создателя этого сценария, чтобы спросить его лично.

EDIT: Я забыл про знак «+», извинения. Я сосредоточился на умножении значения -mtime, но полная команда:

find /path/ -mtime +7*365 -name 'SOME_NAME*.*'

1 Ответ

2 голосов
/ 10 июня 2019

Во-первых, если существует файл, имя которого начинается с 7 и заканчивается на 365 в текущем каталоге, 7*365 заменяется на имя (имена) соответствующего файла (ов).Чтобы гарантировать, что find видит 7*365, подстановочный знак должен быть защищен, например, find -mtime '7*365' или find -mtime 7\*365.

Тогда я никогда не видел реализацию find, которая принимает арифметические выражения.Только неотрицательное целое число в десятичном виде (GNU find также принимает шестнадцатеричное с начальным значением 0x) с необязательным начальным значением - или +.На справочной странице AIX указано, что требуется «десятичное целое число» (с необязательным начальным значением - или +).У меня нет AIX здесь для тестирования, но с 7*365 я бы ожидал ошибку, или если целочисленный синтаксический анализатор очень небрежный, он может быть проанализирован как 7 или 0.

Для поиска файловкоторые были изменены почти 7 лет назад, вам нужно указать оболочке выполнить арифметику: find -mtime $((7*365)).

Модифицированная версия того, что вы написали, что делает , работает следующим образом:

typeset -i interval
interval=7*365
find … -mtime "$interval"

Работает без кавычек и на interval (если IFS не содержит цифру).Это работает потому, что typeset -i объявляет interval как целочисленную переменную.Когда вы присваиваете значение interval, оболочка выполняет арифметику, поэтому interval получает значение 2555.Это работает только под ksh и bash, а не под обычным sh.

...