Digamos que eu copie e cole arquivos da pasta A, que inclui:
Pasta A:
file1.cfg
file2.txt
file3.esp
file4.bsa
na pasta B, que após a atualização, possui:
Pasta B:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
Existe uma maneira de excluir todos os arquivos da pasta A que estão na pasta B (marcados com um *)? Além de selecionar manualmente cada um e excluí-lo, ou pressionar Ctrl-Z'ing logo após a copiar e colar
Eu preferiria um método do Windows ou algum software que pudesse fazer isso
obrigado!
windows
windows-explorer
DarkFire13
fonte
fonte
Respostas:
Existe um software livre chamado WinMerge . Você pode usar este software para combinar duplicatas. Primeiro, use
File
→Open
e escolha os dois diretórios, com a pasta com os arquivos que você deseja manter à esquerda e os que não deseja à direita. Então, vá paraView
e desmarqueShow Different Items
,Show Left Unique Items
eShow Right Unique Items
. Isso deixará apenas os arquivos idênticos restantes na lista. Depois disso, escolhaEdit
→Select All
, clique com o botão direito do mouse em qualquer arquivo e clique emDelete
→Right
. Isso excluirá as duplicatas da pasta da direita.fonte
Isso pode ser feito através da linha de comando usando o comando
forfiles
Vamos supor que você tenha a Pasta A localizada
c:\temp\Folder A
e a Pasta B localizada emc:\temp\Folder B
O comando seria então:
Depois disso, a Pasta B removerá todos os arquivos presentes na Pasta A. Lembre-se de que, se a pasta B tiver arquivos com o mesmo nome, mas não com o mesmo conteúdo, eles ainda serão excluídos.
É possível estender isso para trabalhar com pastas em subpastas também, mas, com medo de que isso se torne desnecessário e complicado, decidi não publicá-lo. Exigiria as opções / se @relpath (e mais testes xD)
fonte
Você pode usar este script do PowerShell:
Espero que seja bastante auto-explicativo. Ele analisa todos os itens da Pasta B, verifica se há um item com o mesmo nome na Pasta A e, se houver, remove o item da Pasta A. Observe que a final
\
nos caminhos da pasta é importante.Versão de uma linha:
Se você não se importa se recebe um dilúvio de erros vermelhos no console, pode remover o
-EA 'SilentlyContinue'
.Salve-o como um
.ps1
arquivo, por exemplodedupe.ps1
. Antes de executar os scripts do PowerShell, você precisará habilitar a execução deles:Você poderá invocá-lo
.\dedupe.ps1
quando estiver na pasta que o contém.fonte
rsync
rsync
é um programa usado para sincronizar o diretório. Dos muitos (realmente muitos) opções que você tem, há o auto-explicativa--ignore-non-existing
,--remove-source-files
e--recursive
.Você pode fazer
se supusermos que você tenha os arquivos nos diretórios A (4) e B (4 + 2).
fonte
A resposta da LPChip é a melhor.
Mas como comecei a aprender Python, pensei: "Caramba, por que não escrever um script Python como resposta a esta pergunta?"
Instale o Python e o Send2Trash
Você precisaria instalar o Python antes de poder executar o script na linha de comando.
Em seguida, instale o Send2Trash para que os arquivos excluídos não sejam irrecuperáveis, mas acabem no lixo do sistema operacional:
Criar script
Crie um novo arquivo com, por exemplo, o nome
DeleteDuplicateInFolderA.py
Copie o seguinte script no arquivo
Uso
Modo de execução a seco, que mostra quais arquivos seriam excluídos sem excluir nenhum arquivo:
Modo de exclusão de arquivo, que de fato exclui arquivos, tenha cuidado:
Saída do modo de funcionamento a seco
Saída do modo de exclusão de arquivo
Teste de unidade
Se você quiser testar o aplicativo acima, crie um arquivo chamado
DeleteDuplicateInFolderATest.py
e cole esses unittests nele:fonte
Usando o bash
Claro que você pode estar mais seguro verificando se o arquivo está lá ou se o nome do arquivo é seguro. Mas supondo que você só queira fazer isso e não tenha arquivos com nomes ridículos
folderB
- essa é uma maneira rápida e suja de fazê-lo. (e você pode usar o emulador de bash que acompanha o git , se você não estiver executando o Win10 + bash)fonte
Qualquer programa no estilo NC, como o Total Commander, possui um comando de diferença de diretório que seleciona arquivos nas duas guias diferentes da outra guia. Chame este comando,
tab
para o diretório maior (B), inverta a seleção usando*
e exclua. Isso tem a vantagem de não excluir arquivos que podem ter sido alterados (de alguma forma) e não são os mesmos, embora concordem em nome. Você pode usar o mesmo comando diff de diretório para localizá-los após a exclusão.Acho que estou preso nos anos noventa ... mas não vejo nada mais elegante desde :-) Até agora, esta é a única resposta que requer apenas cinco toques de tecla e nenhuma linha de script / comando.
fonte
Método Windows
Se você sempre precisar copiar arquivos de um local para outro e depois garantir que os arquivos que foram copiados com êxito também sejam excluídos do local de origem original, a seguir há uma solução de script em lote que você pode usar para automatizar toda a tarefa com apenas um clique simples em cada corrida.
Certifique-se de definir
SourceDir
asDestDir
variáveis e de acordo com suas necessidades.Além disso, na parte do script abaixo,
("%SourceDir%\*.*") DO
você pode simplesmente alterar o*.*
valor para ser mais explícito para nomes de arquivos (File A.txt
) ou extensões de arquivo (*.wav
) conforme necessário.Recursos adicionais
fonte