Похоже, это shuf
, а не cp
, который борется с именами файлов, начинающимися с дефиса. Попробуйте добавить двойное тире -к команде shuf
:
shuf -zn8 -e -- *.jpg | xargs -0I{} cp -vt -- "{}" target/
Я бы использовал для этого find
, а неshuf
:
find. -type f -name '*.jpg' -print0 | xargs -0I{} cp "{}" target/
Кроме того, в этом случае вам не нужно двойное тире -вместо cp
, так как find
вернет имя файла с префиксом ./
.