Existem vários problemas com o comando que você está executando.
mv \'{}\' \'/raid/data/Storage/AppleDouble/'echo $RANDOM'
'echo something'
é equivalente a something
(exceto quando something
contém alguns caracteres especiais, em cujo caso o efeito da echo
adicional e a substituição de comando geralmente pioram as coisas). Então, essa é uma maneira complicada de escrever
mv \'{}\' \'/raid/data/Storage/AppleDouble/$RANDOM
Portanto, o shell passa três parâmetros para o comando find
da parte da linha de comando representada acima: mv
, '{}'
e '/raid/data/Storage/AppleDouble/12345
, em que 12345
é um valor aleatório. Como o valor da variável especial RANDOM
é expandido pelo shell antes de invocar find
, todos os comandos executados por find
serão executados com o mesmo valor. Note também que você tem aspas simples que serão partes dos nomes dos arquivos - apenas solte-as.
Como você deseja expandir $RANDOM
em cada chamada, é necessário informar find
para executar um shell que executará mv
, em vez de ter find
execute mv
diretamente.
find . -type d -name .AppleDouble -exec sh -c 'mv "$0" /raid/data/Storage/AppleDouble/$RANDOM' {} \;
Observe que a probabilidade de uma colisão nos números aleatórios é bastante alta: $RANDOM
só aumenta para 2 15 , portanto, se você estiver copiando mais de 213 arquivos, a probabilidade de dois arquivos serem copiados para o mesmo destino é maior que 50%. É uma péssima ideia usar um nome aleatório neste contexto. Em vez disso, use um nome que seja garantido como distinto para cada arquivo de origem. Uma maneira de fazer isso é usar um hash criptográfico do caminho de origem:
find . -type d -name .AppleDouble -exec sh -c 'mv "$0" /raid/data/Storage/AppleDouble/$(echo "$0" | md5sum | cut -d " " -f 1)' {} \;