Что не так в следующей команде -exec

Я получаю ошибку в команде follwing

cd /opt/lampp/htdocs/EspoCRM-2.5.2 && find data -type d -exec chmod 775 {}

error:

find: missing argument to `-exec'
1
задан 22 September 2014 в 23:27

2 ответа

Как говорили другие, find -exec нужно прекратить. Однако я бы предпочел использовать + вместо \;. Это работает только для некоторых команд, но с помощью + будет создавать и запускать гораздо более эффективную команду.

Например, если у вас есть три файла (a, b и c) в каталог и вы запустите find -exec echo {} \;, он выполнит:

echo a
echo b
echo c

Однако, если вы используете find -exec echo {} +, он будет динамически выбирать столько аргументов, сколько поддерживает среда (есть предел), и, например, xargs объединяет их вместе ... Итак, что на самом деле выполняется:

echo a b c

Как я уже говорил, это будет работать только в том случае, если ваша команда поддерживает сразу несколько файлов. chmod является одним из них. Вы можете узнать, посмотрев страницу man chmod:

SYNOPSIS
       chmod [OPTION]... MODE[,MODE]... FILE...
       chmod [OPTION]... OCTAL-MODE FILE...
       chmod [OPTION]... --reference=RFILE FILE...

Эллипсис на FILE... означает, что он может принимать более одного файла.

Итак, да, цепляя их всех вместе, мы запускаем гораздо меньше экземпляров chmod, что хорошо, потому что есть довольно большие накладные расходы (при небольших операциях, подобных этому) для разблокировки новой команды.

Короче говоря, использование + выполняется быстрее.

3
ответ дан 24 May 2018 в 03:34

Вам нужно завершить свою команду с помощью \;

Попробуйте это:

cd /opt/lampp/htdocs/EspoCRM-2.5.2 && find data -type d -exec chmod 775 {} \;
1
ответ дан 24 May 2018 в 03:34

Другие вопросы по тегам:

Похожие вопросы: