De um modo geral, fico em pânico quando percebo que, se eu cancelar a movimentação de um arquivo, isso pode causar o destino ou a fonte incompletos. Esta pergunta se aplica a plataformas baseadas em Windows e Unix. Nunca me lembro exatamente como o comando move funciona nos dois casos. Por exemplo, se você estiver movendo um diretório; copia o diretório inteiro e o apaga depois ou copia e apaga cada arquivo individualmente?
Sempre percebo, depois de digitar algo assim mv verybigdir dest
, que talvez eu devesse ter digitado cp -R verybigdir dest && rm -R verybigdir
(onde o &&
operador prossegue para o próximo comando apenas se o primeiro tiver sido bem-sucedido) - ou isso não faz sentido? O que acontece exatamente quando pressiono Ctrl+ na Cmetade de uma jogada? Da mesma forma, o que exatamente acontece no Windows quando pressiono o botão Cancelar?
Não consigo contar o número de vezes que mudei alguma coisa (a última vez que usei svn
) e tive dois diretórios, com conteúdo dividido. Acho que a resposta é difícil, porque nem todos os aplicativos movem grupos de arquivos da mesma maneira.
fonte
Respostas:
No Windows, mover para a mesma unidade e partição funcionará exatamente como o comando mv do Unix e renomeará a pasta ou mudará seu pai. No entanto, se você o movesse para outro driver ou partição, ele copiaria e excluiria arquivo por arquivo, por isso é mais eficiente usar um arquivo tar ou um arquivo zip sem compactação para mover arquivos mais rapidamente entre partições e discos rígidos . Se você cancelá-lo, ele simplesmente para onde está. Eu acreditaria que o mesmo é verdade para o Unix, mas não experimentei o suficiente para ter 100% de certeza. É apenas uma questão de alterar o inode, mas se ele estiver em outra partição ou unidade, ele precisará ser copiado para setores dessa partição ou unidade. Se você o cancelasse durante a transferência, ele já teria movido alguns arquivos, e o arquivo que está sendo transferido o verá '
Atualização: se você deseja cancelar uma mudança e quiser retomar, basta emitir novamente o pedido de mudança. Pode avisar que a pasta de destino já existe, mas os arquivos não serão substituídos (a menos que existam antes da movimentação original ou tenham sido adicionados entre as duas ordens de movimentação), pois assim que são transferidos, eles são excluídos do diretório origem (se estiver em uma partição ou unidade diferente).
fonte
Mesmo em um computador perfeitamente estável que nunca falha: se você se preocupa com os carimbos de data e hora,
mv
é melhor que simplescp
.(
cp -a
preservará os registros de data e hora para você e presumo que exista algo semelhante no Windows).fonte
Não.
Explicação:
renomeia verybigdir para dest. Esta é uma operação atômica, ou seja, não pode falhar na metade.
Se dest estiver em outro dispositivo, o mv copiará primeiro e depois excluirá a versão antiga. Esta não é uma operação atômica. Se falhar, você pode ter apenas uma cópia parcial do verybigdir no dest, mas o verybigdir ainda estará completo.
Sim, outros aplicativos podem mover arquivos de maneira diferente.
fonte
mv verybigdir/* dest
.mv verybigdir/* dest
divide o mv do verybigdir em várias operações de movimentação separadas. Lembre-se sempre de que, diferentemente do Windows, um programa / ferramenta Linux não consegue ver que "*" lá, é expandido pelo shell.Nas janelas, eu sempre copio e excluo em vez de mover. Uma vez eu estava movendo arquivos e foi aqui que notei pela primeira vez uma memória ruim. Ao mover o arquivo, ele parou no meio e eu recebi um erro, verifiquei a pasta de origem e o arquivo desapareceu. Verifiquei o destino e houve um arquivo corrompido. Isso aconteceu com mais frequência com arquivos de tamanho maior e a maioria deles foram downloads que levaram horas, então eu recomendo copiar e excluir. Economize seu tempo no começo, mas no final ele será recompensado.
fonte
No unix, em movimentos que não ultrapassam os limites do sistema de arquivos,
mv
não copia os dados: apenas atualiza o banco de dados do inode em vários diretórios. Isso é muito mais rápido do quecp
em arquivos grandes.Além disso, o uso
mv
através dos limites do sistema de arquivos invoca silenciosamente um mecanismo de copiar e excluir.Então eu acho que você deveria preferir
mv
.fonte
No Windows, pelo menos, o movimento é simplesmente uma cópia e exclusão mais automatizada. Acredito que o mv mova cada arquivo individualmente, o que significa que ^ c-ing não perderá nenhum arquivo; você acabará com seus arquivos divididos em dois lugares - ao contrário do Windows Explorer, que descompactará tudo quando for cancelado.
Minha solução para isso é: nunca se mova, a menos que tenha certeza de que deseja movê-lo.
fonte
Se você estiver usando ACLs no sistema de arquivos de origem, mas não no destino, o mv no Linux copiará a fonte e depois - devido à incapacidade de definir as ACLs no destino - pare. Então você acaba tendo o arquivo nos dois lados. Não existe uma opção no mv para impedir esse comportamento, portanto, neste caso, cp && rm é preferível.
fonte