Como apagar arquivos em um diretório, que existem em outro diretório?

1

O que eu preciso é de uma operação de 'subtração' em conjuntos de arquivos em diretórios diferentes. Assumindo esta hierarquia do sistema de arquivos:

A.txt
A.txt
A.txt

B.txt
B.txt

... Gostaria de remover todos os arquivos em A que também existem em B (sem recursão, e só preciso comparar nomes de arquivos).

O resultado deve ser:

A.txt
A.txt

(nada mudou em B\ )

O sistema operacional de destino é o Windows - uma linha de comando ou uma ferramenta GUI. Eu também estou bem com uma abordagem de linha de comando do UNIX - Eu tenho o GnuWin32 instalado.

    
por Cristi Diaconescu 31.08.2011 / 13:56

1 resposta

4

Crie uma lista de arquivos em B \, substitua B \ por A \ e remova-os.

/bin/ls -1 B/ | xargs -I {} echo rm A/{}

remova o eco assim que o tiver. Por exemplo:

$ ls A/
1 2 3
$ ls B/
1 2 
$ /bin/ls -1 B/ | xargs -I {} echo rm A/{}
rm A/1
rm A/2

Se você tiver muitos arquivos, sugiro fazer algo parecido com

#!/bin/sh
for f in 'ls -1 B/*'
do rm A/$f
done

Certificar-se de que os arquivos com espaços e controlar o trabalho de caracteres sejam deixados como um exercício para o leitor ^ _-

    
por 31.08.2011 / 14:05