O comando que você diz estar executando não corresponde à mensagem de erro que você está recebendo, mas de qualquer forma esta resposta deve esclarecer algumas coisas.
Primeiro, observe que, se houver arquivos correspondentes a *jpg
no diretório atual, o padrão *jpg
será expandido na linha de comando de find
. Você precisa citar o padrão para se proteger disso.
Com o comando que você deu, o que é executado é algo como
cd directory && mv -f file
Mas mv
espera dois argumentos: um arquivo de origem e um destino.
Você precisa passar um diretório de destino e, como está usando -execdir
, o diretório de destino será interpretado em relação a cada diretório em que há .jpg
arquivos. Observe que o diretório deve existir. Se você quiser mover todos os arquivos .jpg
para um único diretório, crie-o primeiro e, em seguida, execute
find -iname '*.jpg' -execdir mv -f {} /common-destination-directory
Se você quiser mover todos os arquivos para um caminho relativo, por exemplo, mova-os para o subdiretório images
relativo ao local onde eles estão, você precisará criar o diretório primeiro.
find -iname '*.jpg' -execdir mkdir -p images \; -execdir mv -f {} images \;
Com os utilitários GNU (ou seja, no Linux), você pode otimizar um pouco executando mv
apenas uma vez por diretório:
find -iname '*.jpg' -execdir mkdir -p images \; -execdir mv -t images {} +