2014-10-03 3 views
0

Я занимаюсь справочными страницами и не знаю, как найти порядок выполнения тестов.Порядок оценки в поиске

Обратите внимание, что команда поиска Solaris не имеет «тестов» и «действий» отдельно, а просто проверяет как фрагменты выражения.

В этом случае, для командной строки, как

find . -type d -mount -ctime +5 -prune -exec 'rm {}' \; 

Это гарантирует, что "-типа d" и "-ctime +5" вычисляются до "-exec 'тт {}' \;" и, таким образом, удаляются только правильные файлы?

+0

Несвязанной к ответу, но я не думаю, что 'гт {}' должны быть заключены в кавычки. Вы можете процитировать '{}', если ваша интерпретация будет интерпретировать его в первую очередь, или оставить ее некотируемой в большинстве оболочек. – BroSlow

ответ

0

Объяснение

Различные варианты выполнения find, как правило, называют разные имена operands в man странице. Однако общее выполнение любой версии find, которая следует за стандартом posix, будет таким же.

find [-H | -L] path ... [operand_expression ...] 

мужчина страница цитаты взяты из posix find man page

Где каждый набор из двух соприкасающихся expressions (значение -operand (Argument)), который не имеет явный оператор отделяющей expressions, имеет неявный -a (AND) оператор отделяющий их.

expression [-a] expression 
Conjunction of primaries; the AND operator is implied by the juxtaposition of 
two primaries or made explicit by the optional -a operator. 
The second expression shall not be evaluated if the first expression is false. 

Заключение

Таким образом, любая реализация, которая соответствует стандарту posix должен выполнить expressions слева направо; и

find . -type d -mount -ctime +5 -prune -exec 'rm {}' \; 

эквивалентно

find . -type d -a -mount -a -ctime +5 -a -prune -a -exec 'rm {}' \; 

Значение, что -exec будет выполняться только тогда, когда все предыдущие operands истинны.

Другого

Стоит также отметить, что в то время как -exec не может называться явной action по вашей реализации находки, он должен еще получить лечение подобных образом (а именно замена -print действий)

If no expression is present, -print shall be used as the expression. 
Otherwise, if the given expression does not contain any of the primaries -exec, 
-ok, or -print, the given expression shall be effectively replaced by: 

(given_expression) -print 

Редактировать

Технически верно, что не каждый осущ ementation должна быть posix жалоба. He're почти идентичную цитата из solaris find man page

expression [-a] expression 
Concatenation of primaries (the and operation is implied by the juxtaposition of two primaries). 
+1

Это не «гарантирует» по требованию, но достаточно близко. Большое спасибо. – Envite

+0

@Envite Правда, что не каждая реализация должна быть 'posix'-совместимой. Добавлена ​​цитата из справочной страницы 'solaris find'. – BroSlow

+1

Да, именно то, что я видел, без объяснения «Второе выражение не должно оцениваться, если первое выражение ложно». которые приводят меня к вопросу. – Envite