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 mv
tem 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-run
opçã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-excluded
opção. Novamente, use --dry-run
para verificar o que será excluído antes de executá-lo.
Existe um --remove-source-files
que 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