Encontre e exclua todos os mesmos arquivos (por nome) entre 2 diretórios

1

Eu quero encontrar todos os arquivos em dir1 tendo os mesmos nomes de arquivo correspondentes em dir2 e excluí-los do diretório1.

Por exemplo:

dir1: first.txt second.txt
dir2: third.txt first.txt

Então, eu quero remover do arquivo dir1 first.txt .

Como conseguir isso usando o terminal Bash? (não script com for loops etc. ou programa de terceiros como "fdupes")

    
por michael 03.11.2015 / 12:27

4 respostas

4

Para lidar com nomes de arquivos com espaços:

#!/bin/bash
OPWD=$(pwd)
cd "$1"
for MYFILE in "$2"/*
do
    if [ -f "${MYFILE##/*/}" ]
    then
        echo "removing ${MYFILE##/*/}"
        rm "${MYFILE##/*/}"
    fi
done
cd "$OPWD"
    
por 03.11.2015 / 12:45
4

Outra rapidinha, também sem um loop explícito. Não se esqueça, você pode prefixar o rm -f com echo para testar isso.

( cd dir2 && find . -maxdepth 1 -type f -print0 ) | ( cd dir1 && xargs -0 rm -f )

Você pode colocar isso em um script, substituindo dir1 por "$1" e dir2 por "$2"

    
por 03.11.2015 / 14:53
0

Resposta rápida ...

#!/bin/bash
#finddel dir1 dir2

for i in $(ls $1)
    do
    [ -f $2/$i ] && echo "Deleting $2/$i" && rm -f $2/$i
done
    
por 03.11.2015 / 13:14
-1

Use rsync :

rsync --verbose --remove-source-files xyz/* .
pop3-2.dump
pop3-3.dump
pop3.dump
popcorn-build.log

sent 852,069,995 bytes  received 124 bytes  113,609,349.20 bytes/sec
total size is 851,861,745  speedup is 1.00
    
por 03.11.2015 / 13:50