Um caminho:
#!/bin/bash
cd ~/B
for file in ~/A/*
do
file1=$(basename "$file")
[ -f "$file1" ] && { echo "deleting $file1 "; rm -- "$file1"; }
done
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.
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.
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.