Ошибка возникает из-за того, что ваша команда find
не возвращает никаких файлов.К сожалению, xargs
все еще запускает cp
, но в итоге вызывает его с слишком малым количеством аргументов;и поэтому вы получите сообщение об ошибке.
GNU xargs
имеет опцию -r
, которая решает этот конкретный случай;но более переносимым и более надежным решением является использование find -exec
.
find i386/ -type f -name '*test*' -o -name '*demo*' -o -name '*log*' \
-exec cp -rt "test_release/${RELEASE}-i386/i386" {} +
Терминатор оператора +
для -exec
не является полностью переносимым, но если у вас есть cp -t
Я полагаю, вы 'на Linux, или, по крайней мере, используете недавний find
(GNU или не GNU. Если нет, замена +
на \;
- это обходной путь, хотя в конечном итоге он будет запускать больше процессов, чем эквивалентная конструкция xargs
).