Busque y elimine todos los mismos archivos (por nombre) entre 2 directorios

Busque y elimine todos los mismos archivos (por nombre) entre 2 directorios

Quiero encontrar todos los archivos en dir1 que tengan los mismos nombres de archivo correspondientes en dir2 y eliminarlos de dir1.

Por ejemplo:

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

Entonces quiero eliminarlo del dir1 first.txtarchivo.

¿Cómo lograr esto usando la terminal Bash? (no script con forbucles, etc. ni programas de terceros como "fdupes")

Respuesta1

Para manejar nombres de archivos con espacios:

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

Respuesta2

Otro rapidito, también sin bucle explícito. No lo olvides, puedes anteponer el rm -fwith echopara probar esto.

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

Puedes poner esto en un script, reemplazándolo dir1con "$1"y dir2con"$2"

Respuesta3

Respuesta 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

Respuesta4

Usar 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

información relacionada