Move apenas na verificação?

2

Por algum motivo, copiar arquivos do meu telefone pela interface do fusível MTP às vezes resulta em arquivos corrompidos, perdendo seus últimos bytes. Desejo remover cada arquivo da transferência bem-sucedida, mas não removê-los se houver um problema. O comando mv não tem uma opção --verify . Eu poderia escrever um pequeno script que copia, verifica e remove, mas eu estou querendo saber se existe um comando existente mais elegante que possa lidar com isso?

Como bônus, seria bom especificar a soma de verificação e o sucesso de um comando de verificação externo, neste caso jpeginfo -c . Eu acho que as leituras curtas são ocorrências aleatórias, mas eu realmente não testei que o arquivo ruim não é realmente armazenado dessa maneira (ou seria lido incorretamente da mesma maneira duas vezes). Então, algo como mv --verify --verifywith='jpeginfo -c' seria ideal (onde jpeginfo -c é um comando que testa arquivos JPEG para correção e que eu sei que retornará um erro nesses arquivos truncados em particular).

    
por mattdm 15.06.2015 / 16:19

1 resposta

2

O rsync pode fazer isso com --remove-source-files . De man rsync (ênfase minha):

This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the transfer and have been successfully duplicated on the receiving side.

Não tenho certeza de como ele verifica a duplicação bem-sucedida, além de que ele não será removido se ocorrer um erro durante o processo. É bem possível que isso seja tudo o que faz.

Se a interface estiver corrompendo silenciosamente os arquivos, no entanto, acho que até mesmo copiar / verificar / remover não consertará realmente seu problema, já que até mesmo a verificação pode produzir resultados falsos.

Como você mencionou o MTP e um telefone, imagino que esteja usando o Android. Se você considerasse uma interface alternativa do FUSE, talvez queira tentar adbfs .

    
por 15.06.2015 / 16:31