Como remover arquivos correspondentes do diretório A no diretório B na linha de comando?

1

Eu tenho alguns arquivos duplicados nos diretórios A e B , como eu poderia excluir os dupes em B usando os nomes de arquivos de A no bash?

Como fazer isso em outros shell's é um bônus bem-vindo.

    
por somethingSomething 15.11.2014 / 14:04

3 respostas

2

Um caminho:

#!/bin/bash
cd ~/B
for file in ~/A/*
do
    file1=$(basename "$file")
    [ -f "$file1" ] && { echo "deleting $file1 "; rm -- "$file1"; }
done
    
por 15.11.2014 / 14:13
1

Em 3 linhas:

$ delfrom=/home/KasiyA/dirB # delete from
$ cd /home/KasiyA/dirA      # matched from
/dirA$ find . -type f -exec cmp -s '{}' "$delfrom/{}" \; -exec echo rm -v "$delfrom/{}" \;

Em um teste:

$ ls -1 ~/dirA
dupfile
file1inA

$ ls -1 ~/dirB
dupfile
file1inB

/dirA$ find . -type f -exec cmp -s '{}' "$delfrom/{}" \; -exec echo rm -v "$delfrom/{}" \;
rm -v /home/KasiyA/dirB/./dupfile

Você pode alterar o delfrom=/path/to/removing/duplicates para remover arquivos duplicados de outro diretório.

    
por 15.11.2014 / 14:37
1

Em uma linha

grep -f <(ls "A") <(ls "B") | xargs -I'{}' rm "B/{}"

mas o trabalho depende apenas do nome do arquivo e pode afetar subdiretórios vazios. Para evitar isso, use find -type f -maxdepth 1 em vez de ls .

Para uma verificação mais segura, use o @KasyA recepie.

    
por 15.11.2014 / 15:06