Tentei encontrar arquivos e movê-los para outra pasta
$ find ~ -iregex ".*cheat.*\.pdf" -exec mv "{}" cheatSheet +
find: missing argument to `-exec'
No entanto, o teste funciona
find ~ -iregex ".*cheat.*\.pdf" -exec echo {} +
Qual é o problema com o meu uso?
O
{}
precisa ser o fim do-exec
comando. Omv
comando suporta isso com a-t
opção:Então seu comando seria:
Ao usar
-exec ... {} +
, o{}
deve estar no final, logo antes do+
.Isso significa que você teria que usar
o que exigiria acesso ao GNU
mv
. Sem GNUmv
, você usariapara mover um arquivo de cada vez, ou
para chamar um script in-line que move todos os arquivos de uma só vez.
Você também não precisa
-iregex
. O seguinte será mais fácil de ler e entender:ou, para maior clareza, qualquer um dos seguintes que faz o que você realmente quer dizer (depende se você deseja
cheat
fazer parte do nome do arquivo no final do caminho (a primeira alternativa) ou um dos nomes de diretório no caminho (a segunda alternativa)):Observe que é uma extensão
-ipath
GNU , mas que , embora não seja padrão, é mais comumente implementada.find
-iname
Também vale a pena notar que se você tiver colisões de nomes, ou seja, arquivos com exatamente o mesmo nome, você substituirá alguns arquivos já movidos no processo de mover outros arquivos. Com GNU
mv
, você pode evitar isso usando a-n
opção (não irá sobrecarregar os arquivos existentes) ou a-b
opção (renomear/fazer backup dos arquivos existentes).Relacionado: