Estou seguindo esta pergunta, embora alguns dos nomes de arquivo aqui contenham um traço no início do nome do arquivo. Isso é interpretado como uma opção adicional para cp
.
Seguindo outra pergunta (no ServerFault) , tentei alterar o comando para:
shuf -zn8 -e *.jpg | xargs -0 cp -vt -- {} target/
ou
shuf -zn8 -e *.jpg -exec cp -vt -- {} target/
para nenhum proveito. Como faço para lidar com -
o início do nome do arquivo?
Parece que
shuf
não é ocp
que está lutando com os nomes de arquivos que começam com um traço. Tente adicionar o traço duplo aoshuf
comando:Eu usaria
find
para isso, em vez deshuf
:Além disso, você não precisa usar o traço duplo
cp
neste caso, poisfind
retornará o nome do arquivo com./
prefixo.A
-t
opção (uma extensão GNU) recebe um argumento que é o diretório de destino.Com
xargs -0 cp -vt -- target/
, isso tentaria copiartarget/
e os arquivos selecionados em um diretório chamado--
, e você ainda não teria marcado o fim das opções. Você precisaria marcar o fim das opções parashuf
também.{}
é especial apenas comfind
o-exec
predicado de , ou comxargs
se você usar-I'{}'
, mas não precisa dele aqui.shuf
não tem-exec
predicado.Aqui, você gostaria:
Ou
Com
zsh
, você também pode usar seu qualificador de globe
de ordenação baseado em xpression :o
Isso tem a vantagem sobre a
shuf
abordagem de trabalhar em qualquer sistema (desdezsh
que esteja instalado; você pode precisar desistir do não-padrão-v
em alguns sistemas) e também de ainda funcionar mesmo se houver dois muitosjpg
arquivos no diretório atual (e a execuçãoshuf
falharia com um erro de muitos argumentos ).