Arrasto e solto uma pasta em outra por engano no FileZilla.
~/big_folder
~/some_other_folder
A pasta foi movida é muito grande. Inclui centenas de milhares de arquivos (node_modules, pequenos arquivos de imagem, muitas pastas)
O que é tão estranho é que, depois que solto o mouse, a mudança está concluída. A pasta "big_folder" é movida para "some_other_folder".
~/some_other_folder/big_folder
(não há big_folder
no ~/
depois de se mudar)
Então percebo o erro e tento voltar, mas ele falha no FileZilla e no terminal.
Tenho que cp -r
copiar os arquivos novamente, porque existem códigos do servidor acessando esses arquivos em~/big_folder
E demora uma eternidade para esperar ...
O que devo fazer?
BTW, aqui estão os resultados do FileZilla (é a falha do retorno):
Status: Renaming '/root/big_folder' to '/root/some_other_folder/big_folder'
Status: /root/big_folder -> /root/some_other_folder/big_folder
Status: Renaming '/root/some_other_folder/big_folder' to '/root/big_folder'
Command: mv "big_folder" "/root/big_folder"
Error: mv /root/some_other_folder/big_folder /root/big_folder: received failure with description 'Failure'
received failure with description 'Failure'
,.mv /root/some_other_folder/big_folder /root/big_folder
. Que mensagem de erro você recebe?cp -al
mv vs cp
pergunta do OP é abordada, mas eu gostaria de saber por que ele conseguiu mover a pasta em uma direção instantaneamente, mas não na outra.Respostas:
Se um diretório for movido dentro do mesmo sistema de arquivos (a mesma partição), tudo o que é necessário é renomear o caminho do arquivo do diretório. Nenhum dado além da entrada do diretório em si deve ser alterado.
Ao copiar diretórios, os dados de cada arquivo precisam ser duplicados. Isso envolve a leitura de todos os dados de origem e a gravação no destino.
Mover um diretório entre sistemas de arquivos envolveria copiar os dados para o destino e removê-los da fonte. Isso levaria tanto tempo quanto copiar (duplicar) os dados em um único sistema de arquivos.
Se o FileZilla renomeou com sucesso o diretório de
~/big_folder
para~/some_other_folder/big_folder
, então eu reverteria isso usando... após a primeira certificando-se de que não havia diretório chamado
~/big_folder
(se houvesse, a medida vai colocarbig_folder
partirsome_other_folder
para o~/big_folder
diretório como uma subpasta).fonte
mv ~/some_other_folder/big_folder ~/
depois de me certificar de que não há outrobig_folder
no diretório inicial. Eu nunca usei o FileZilla.A resposta existente é ótima, mas eu gostaria de expandir um pouco, mostrando exatamente o que está acontecendo quando você se move ou quando copia um arquivo. Quando você olha para os syscalls durante uma cópia, vê:
Isso abre o arquivo de origem e cria um segundo arquivo. Em seguida, ele lê o conteúdo do arquivo de origem na memória e grava essa memória no arquivo de destino. Isso requer várias opções de contexto e algumas E / S de disco que podem ser bastante altas para arquivos grandes. Se você mover um arquivo, no entanto, verá:
É importante lembrar que você só verá o arquivo renomeado se estiver na mesma partição no mesmo disco físico. Se você criar um arquivo enorme de vários gigabytes e depois o mover entre dois locais em sua casa, notará que a ação é concluída instantaneamente. Se, por outro lado, você o mover para um dispositivo externo, levará tanto tempo para mover como se você o tivesse usado
cp
. Isso ocorre porque a movimentação de um arquivo só pode ser feita renomeando-o se estiver na mesma partição.fonte
getdents()
emkdir()
chamadas espalhada ao redor.