find: отсутствует аргумент для `-exec 'в Cygwin

Что именно означает , для которого процесс имеет разрешение на отправку сигнала?

На это есть ответ прямо на справочной странице:

Чтобы процесс имел разрешение на отправку сигнала, он должен быть либо привилегированным, либо реальный или эффективный идентификатор пользователя отправляющего процесса должен совпадать с реальным или сохраненным set-user. -ID целевого процесса. В случае SIGCONT достаточно, чтобы отправляющий и принимающий процессы принадлежали к одному и тому же сеансу.

Как проверить, какие процессы получат сигнал?

Вы можете пройтись по списку процессов и попытаться уничтожить каждый из них с помощью сигнала 0 (сигнал пробного запуска). Это скажет вам, было ли у вас разрешение на отправку реального сигнала.

0
27.08.2017, 01:18
3 ответа

Два вопроса из первоначальной постановки вопроса:

  1. Команда, выполняемая с помощью -exec, должна быть завершена с помощью ;.
  2. Неверный формат команды rsync.

Это то, что я думаю, вы можете захотеть:

find components -iname "*.html" -exec rsync -R {}./build/ ';'

Чтобы скопировать файл с помощью rsync, вам нужно будет указать, куда он должен быть скопирован в . Здесь я предположил, что вы хотите скопировать все найденные файлы в ./build/.

После обновления вопроса:

Команда, которую выполняет find, должна заканчиваться символом ;-, защищенным от оболочки. Правильный способ защитить ;от командной оболочки — указать его в кавычках с помощью \;или ';'¹.

Поскольку вы используете \\;, вы «отменяете» цитирование ;и вместо этого процесс findпросто увидит завершение \. Поскольку он не видит ;, он будет жаловаться на отсутствие аргументов.

Вы где-то упомянули npm. Это менеджер пакетов для JavaScript. Поскольку вы упомянули об этом, это наводит меня на мысль, что вы запускаете findне из командной строки, а из какого-то сценария. Цитирование может (потенциально )работать по-разному внутри скрипта в зависимости от конкретных грамматических и синтаксических правил этого скриптового языка.

Чтобы правильно решить эту проблему, было бы очень полезно увидеть фактический вызов findв контексте скрипта, который его вызывает.

До тех пор, пока вопрос не будет дополнен этой информацией, ответ, который я здесь дал, будет настолько точным, насколько это возможно.


¹ (или ";"или более экзотические формы, такие как $';'или $'\u003b'в зависимости от корпуса, ';'является наиболее портативным)

3
28.01.2020, 02:24

Правильный формат find—:

find components -iname "*.html" -exec rsync -R {} \;
0
28.01.2020, 02:24

При запуске из стандартной MS -командной строки DOS с использованием cygwin двоичного файла find.exe может случиться так, что вы не не нужно избегать финала ' ; ' (поскольку не sh/bash/... интерпретирует командную строку, а DOS, для которого ';' не является специальным символом):

Я бы попробовал:

find components -iname "*.html" -exec rsync -R {}./build/ ;
0
28.01.2020, 02:24

Теги

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