Como você move todos os arquivos e subdiretórios de uma pasta para outra? O comando mv não move nenhum subdiretório

Como você move todos os arquivos e subdiretórios de uma pasta para outra? O comando mv não move nenhum subdiretório

Eu só quero mover e substituir todos os arquivos e pastas, incluindo quaisquer subdiretórios e seus arquivos, para outra pasta e sua subpasta.

Eu tentei os seguintes comandos, mas eles não funcionam no subdiretório e em seus arquivos.

mv -f fromA/* toB/

mv -f fromA/{,.}* toB/

Portanto, todos os arquivos da pasta A são movidos para a pasta B, mas não de A/sub para B/sub.

Recebo o erro não é possível mover 'fromA/subA' para 'toB/subB': o arquivo existe

Funciona se eu descer cada pasta uma por uma, mas tenho certeza de que estou faltando alguma coisa. Já vi a maioria, senão todas as respostas relacionadas, mas nenhuma delas funciona aqui.

Responder1

info mvtem isso:

   _Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.

Não há opção de anular isso, ao que parece. Remova B e renomeie A (de volta para B) ou esvazie/exclua os diretórios em B manualmente primeiro.

Responder2

Eu recomendo usarrsync

Com o rsync, você pode especificar que deseja que os arquivos sejam excluídos e pode até fazer uma "simulação" para ver exatamente o que aconteceria se você o executasse de verdade.

Tentar

rsync -av --dry-run --delete-before fromA toB

O --delete-before é ótimo para mesclar arquivos em sistemas com pouco espaço. Se você estiver satisfeito com o teste, remova a --dry-runopção.

Eu recomendo olhar a página de manual para ver todas as diferentes opções de "exclusão" para que você possa determinar qual pode ser melhor para você.

Se você deseja excluir todos os arquivos do destino que não estão relacionados à movimentação, você pode usar a --delete-excludedopção. Novamente, use --dry-runpara verificar o que será excluído antes de executá-lo.

Existe um --remove-source-filesque removerá os arquivos de origem durante a transferência (como faria o mv), mas não remove diretórios. Então você ainda terá que remover os diretórios de origem comrm

Responder3

Com base na sua afirmação de que você recebeu um erro informando que o arquivo já existe, você já possui pastas e arquivos em 'toB'? Se você deseja mesclar os arquivos de 'fromA' para 'toB', provavelmente é melhor apenas copiar os arquivos recursivamente (cp -ar) e remover 'fromA' posteriormente.

Caso contrário, se 'toB' inicialmente estiver vazio e você quiser apenas ter certeza de que o conteúdo de 'toB' é igual a 'fromA':

$ rm -rf toB
$ mv fromA toB

informação relacionada