Depois de obter a resposta de Stephen Kitt e discutir este comando como uma solução potencial:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Decidi adiar a execução até entender o que estava acontecendo, esta resposta descreve o que descobri e acabei fazendo.
Estou usando o Gnu, mv
que copia arquivos para o destino; somente se a operação de cópia for bem-sucedida, ele excluirá o original.
No entanto, eu queria confirmar se mv
essa sequência é executada um arquivo por vez. Se isso fosse verdade, o conteúdo da pasta original seria dividido em duas partes, uma parte deslocada para o destino e a outra ainda na fonte. E, possivelmente, haveria um arquivo que foi interrompido durante a cópia, que seria comum entre os dois diretórios - e provavelmente teria um formato incorreto.
Para descobrir arquivos comuns entre os dois diretórios, executei:
~% sudo diff -r --report-identical-files my_data_on_60GB_partition/. /media/admin/mydata/. | grep identical | wc -l
14237
Este resultado sugeriu que havia 14.237 instâncias dos mesmos arquivos nos diretórios de origem e de destino, confirmei verificando os arquivos manualmente - sim, havia muitos dos mesmos arquivos nos dois diretórios. Isso sugere que somente após a mv
cópia de grandes faixas de arquivos ele executa a exclusão dos arquivos de origem. Uma pesquisa rápida no info
no mv
comando mostrou
Ele mv
usa primeiro o mesmo código usado cp -a
para copiar os diretórios e arquivos solicitados e, assumindo que a cópia foi bem-sucedida, remove os originais. Se a cópia falhar, a parte que foi copiada para a partição de destino será removida.
Não executei o comando, mas suspeito que se tentasse executar
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
O -i
prompt antes da substituição provavelmente teria disparado mais de 14.000 vezes.
Então, para descobrir quantos arquivos totais no diretório recém-criado:
~% sudo find my_data_on_60GB_partition/ -type f -a -print | wc -l
14238
Portanto, se houvesse um total de 14238 arquivos regulares no novo diretório e 14237 tivessem originais idênticos na origem, isso significa que havia apenas um arquivo no novo diretório que não tinha um arquivo idêntico correspondente na origem. Para descobrir o que era esse arquivo, executei o rsync de volta na direção da fonte:
~% sudo rsync -av --dry-run my_data_on_60GB_partition/ /media/admin/my_data
sending incremental file list
./
Education_learning_reference/
Education_learning_reference/Business_Education/
Education_learning_reference/Business_Education/Business_education_media_files/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/018 business plans-identifying main KPIs.flv
sent 494,548 bytes received 1,881 bytes 330,952.67 bytes/sec
total size is 1,900,548,824 speedup is 3,828.44 (DRY RUN)
Uma verificação rápida confirmou que este era o arquivo malformado, onde o arquivo existia na origem e no destino, arquivo de destino = 64MB, original = 100MB. Este arquivo e sua hierarquia de diretórios ainda pertenciam à raiz e ainda não tinham as permissões originais restauradas.
Então, em resumo:
- todos os arquivos que
mv
nunca foram alcançados ainda estão de volta em seus locais originais (obviamente)
- todos os arquivos que
mv
copiaram completamente ainda tinham suas cópias originais no diretório de origem
- o arquivo que foi copiado apenas parcialmente ainda tinha o original de volta no diretório de origem
Em outras palavras, todos os arquivos originais ainda estavam intactos e a solução nesse caso foi simplesmente excluir o novo diretório!
Control-Z
(pausar) em vez deControl-C
. Nesse caso, você seria capaz de ver qual arquivo estava sendo transferido naquele momento e, assim, saber qual arquivo foi copiado apenas parcialmente. Você pode então decidir com calma como proceder. (Usekill -stop
para processos que não estão no tty).