Graças aos comentários de pôsteres, consegui resolver o problema. Esta é uma versão editada da minha resposta anterior porque foi considerada insuficiente e gerou mais perguntas do que respostas.
Então, aqui estou tentando descrever cada problema que levou ao problema em si e como resolvi isso.
Tentativa 1: sintaxe mv
incorreta?
Do script, a seguinte linha não fez nada:
find "/var/www/analysis_xyz/" -name '*log.gz' -exec mv -f {} "/media/pi/MOBIDICDATA" \;
Eu não tinha certeza se poderia usar os parâmetros padrão de mv
durante a chamada de um -exec
, mas adicionei o parâmetro -f
para sobrescrever os arquivos existentes no diretório de destino de qualquer maneira.
Ao adicionar o set -x
ao script como sugerido, ele me retornou uma mensagem de erro dizendo que algo está errado com os argumentos do comando mv
. Então eu removi o parâmetro -f
. Sem sucesso. Após googlar um pouco mais e ver alguns exemplos que todos usaram o parâmetro -t
, então eu adicionei. Mais uma vez, sem sucesso, em vez disso eu recebi uma mensagem de erro dizendo que um diretório é esperado, o que eu interpretei errado (desculpe, um pouco de noob sobre shell script). Neste momento eu tive a seguinte sintaxe, que depois ficou absolutamente correta e funcionando:
find /var/www/analysis_xyz/ -name '*log.gz' -exec mv {} -t /media/pi/MOBIDICDATA \;
(observe o movido {}
). Mas no momento o problema ainda não estava resolvido e eu não tinha certeza se -f
e -t
eram parte dele.
Tentativa nº 2: - Estou tentando gravar em um pendrive USB somente de leitura?
Como você deve ter notado, a pasta de destino é /media/pi/…
. Então, você pode estar ciente de que estou usando um Raspberry Pi e estou no Raspbian. O pendrive que eu queria gravar os dados é montado automaticamente nessa pasta (desde que o dispositivo tenha o nome MOBIDICDATA
). A montagem automática montou o dispositivo como somente leitura (e neste momento eu não sabia por quê). Isso fez com que o processo fosse executado, mas nenhum arquivo foi copiado e uma mensagem de erro foi levantada dizendo que o dispositivo era somente leitura.
Eu decidi não confiar na montagem automática e montar o dispositivo sozinho na reinicialização para outro local. O novo destino foi /mobidicdata
. O dispositivo foi montado com sucesso, mas ainda assim foi lido por algum motivo.
Tentativa # 3: - A vida é curta para remover o USB com segurança?
No passado eu literalmente matei 2 dispositivos USB removendo-os com segurança de um PC com Windows, então decidi não fazer mais isso, já que eu nunca matei um dispositivo simplesmente puxando-o para fora. Mal sabia eu que, por exemplo Pendrives, que simplesmente foram retirados sempre , são montados como somente leitura na maioria dos sistemas não-Windows; o que faz todo o sentido, já que o sistema de arquivos pode estar corrompido e causar outros problemas. Depois de aprender isso, eu removi o dispositivo USB com segurança, montei e agora era r / w.
Então, teste novamente com o dispositivo gravável e a seguinte sintaxe:
find /var/www/analysis_xyz/ -name '*log.gz' -exec mv {} -t /mobidicdata \;
… o que estava funcionando.
Para mim, este foi um pouco de um Odysee.
Resumo
Sim, o parâmetro -t
/ -f
não foi o problema mencionado anteriormente. Era mais um cluster de múltiplos problemas que eu já deveria ter descrito com mais detalhes anteriormente.
Espero lançar alguma luz sobre a coisa toda e o que sei a partir de agora e farei no futuro:
- Você definitivamente deve remover o USB com segurança
Infelizmente, não consigo reproduzir completamente o problema acima. Nesse caso, eu poderia ter declarado as mensagens de erro exatas. Mas eu ainda acho que isso dá um pouco mais de conhecimento sobre o que aconteceu e o que foi feito.