-Exec отсутствует аргумент в команде поиска (разница между \; и +) - PullRequest
0 голосов
/ 17 февраля 2019

Начнем с того, что я прочитал соответствующие темы, но ни один из них не объяснил мои сомнения.

У меня есть следующая команда, которая отлично работает:

find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp {} ./build/ \;

Однако, используя; означает, что я передаю каждый найденный файл команде cp по одному.Я думал, что смогу передать их все сразу, так как команда cp позволяет это.Основываясь на другом ответе, который я нашел:

Команда -exec должна заканчиваться символом a;(поэтому вам обычно нужно вводить \; или ';', чтобы избежать интерпретации оболочкой) или +.Разница в том, что с; команда вызывается один раз для каждого файла, с + она вызывается как можно меньше раз (обычно один раз, но максимальная длина для командной строки, поэтому она может быть разделена) свсе имена файлов

Так как я это сделал:

find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp {} ./build/ +

И здесь я получаю сообщение об ошибке:

find: missing argument to `-exec'

Можете ли вы объяснить мне, почемуэто не разрешено?

1 Ответ

0 голосов
/ 17 февраля 2019

+ в порядке, но вы неправильно используете параметр с exec.

вы можете попробовать:

find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec bash -c 'cp $@ ./build/' - {} +

или

find ./source/ -maxdepth 1 -type f ! -name "secretinfo.md" -exec cp --target-directory=./build/ {} +

Несмотря наэто может быть не совсем удовлетворительным, причина для why в том, что так может быть because it is supposed toman find вы можете увидеть:

-exec command {} +

, и вы можете заметить, что команда до {} + (который каким-то образом прописан в этом синтаксисе).

Должен сказать, я не знаю, почему это указано именно так (похоже на posix: http://pubs.opengroup.org/onlinepubs/009695399/utilities/find.html)

см. также

Устранение ошибки 'find: отсутствует аргумент -exec' с помощью find -exec cp {} TARGET_DIR +

, для некоторых других примеров см. find: отсутствующий аргументв -exec

...