2014-02-03 5 views
0

Нужна помощь в понимании этой сложной Unix найти команд и ее работу:неясная Unix найти команду синтаксис понимания

find . \(\! -user xx -exec chown -- xx '{}' + -false \) -o \ 
\(\! -group root -exec chgrp -- root '{}' + \) -o \ 
\(! -perm 700 -exec chmod -- 700 '{}' + -exec false \; \) 

Кроме того, я ищу в частности, цели -False предиката. Я предполагаю, что я смешал как GNU и не GNU найти синтаксис

ответ

1

Ложное предикат оценивается ложь для -o и используется здесь для предотвращения короткого короткого замыкания.

  • если пользователь не хх хх сделать
  • , если группа не является корнем, сделать его корень
  • если не все разрешения устанавливаются для владельца, предоставить все разрешения.

Каждая команда отделяется -o и заканчивали false так, что все они применяются к каждому элементу.

+0

Спасибо [perreal] (http://stackoverflow.com/users/390913/perreal), но все же я не мог понять цель ** - false ** и ее значение короткого замыкания. Что делать, если я не использую его в приведенном выше коде? Кроме того, опция «-o» просто объединяет каждую отдельную команду здесь? если да, то для чего ** - или ** и ** - a **? –

+0

Поскольку или, как логический оператор, оценивается как true, если любой из его аргументов истинен, большинство языков программирования останавливают оценку и возвращают true (что называется коротким замыканием). Чтобы предотвратить это, вы можете заставить каждый аргумент возвращать 'false' и, следовательно, оценивать все' или ''ed термины. – perreal

+0

В этом случае мы могли бы использовать опцию ** - a ** (AND) вместо ** - o ** (OR), которая будет строго оценивать все без цели короткого замыкания (** - false **) ?? Кроме того, я надеюсь, что опции ** - o ** и ** - или ** являются одним и тем же в команде ** find ** –

Смежные вопросы