Diff diff e remoção

1

Existe uma maneira simples de (recursivamente) remover todos os arquivos de um diretório A idêntico (mesmo nome e mesmo hash) aos arquivos no diretório B, preservando a estrutura?

por exemplo. Um arquivo / 1 é removido se B / file1 existir; mas A / file1 não é removido embora B / d / file1 exista

    
por CRE 18.12.2012 / 17:35

2 respostas

1

Se você quiser que todos os arquivos em A existam em B, você pode simplesmente usar rsync com a opção --remove-source-files , para adicionar / atualizar os arquivos em B, com aqueles em A, e então apagar os arquivos originais de R. Ou com um pouco mais de hacking, executando rsync em --dry-run mode e canalizando a saída por grep , xargs e rm -f , apenas compare as duas estruturas de diretório e exclua os arquivos idênticos, consulte :

Linux / Unix rsync: Excluir arquivo de origem após a transferência

rsync --remove-source-files exclui arquivos fonte um por um ou depois que o rsync é concluído?

    
por 20.12.2012 / 16:09
0

Você poderia fazer algo assim. Por favor, note que este é um código não testado. Eu assumo que $ A e $ B são seus dois diretórios:

(cd $B && find . -type f -print) | (cd $A && while read f; do /bin/rm -f "${f}"; done;)

Eu apenas tentei, mas ecoando o comando stdout em vez de executá-lo, e parece funcionar ok:

$ (cd $B && find . -type f -print) | (cd $A && while read f; do echo /bin/rm -f "${f}";done;)
/bin/rm -f ./1
/bin/rm -f ./2
/bin/rm -f ./3
/bin/rm -f ./4

Se isso parecer fazer o que você deseja, execute-o novamente, mas omita a palavra "echo" no comando.

    
por 18.12.2012 / 20:17

Tags