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.txt
archivo.
¿Cómo lograr esto usando la terminal Bash? (no script con for
bucles, 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 -f
with echo
para probar esto.
( cd dir2 && find . -maxdepth 1 -type f -print0 ) | ( cd dir1 && xargs -0 rm -f )
Puedes poner esto en un script, reemplazándolo dir1
con "$1"
y dir2
con"$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