Suchen und löschen Sie alle gleichen Dateien (nach Namen) zwischen 2 Verzeichnissen

Suchen und löschen Sie alle gleichen Dateien (nach Namen) zwischen 2 Verzeichnissen

Ich möchte alle Dateien in Verzeichnis1 finden, die die entsprechenden gleichen Dateinamen in Verzeichnis2 haben, und sie aus Verzeichnis1 löschen.

Zum Beispiel:

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

Also möchte ich es aus dir1 first.txtder Datei entfernen.

Wie erreicht man dies mit dem Bash-Terminal? (kein Skript mit forSchleifen usw. oder Drittanbieterprogramm wie „fdupes“)

Antwort1

So handhaben Sie Dateinamen mit Leerzeichen:

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

Antwort2

Noch ein Quickie, ebenfalls ohne explizite Schleife. Vergessen Sie nicht, Sie können zum Testen das Präfix rm -fwith verwenden.echo

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

Sie können dies in ein Skript einfügen und dir1durch "$1"und dir2durch ersetzen."$2"

Antwort3

Schnelle Antwort...

#!/bin/bash
#finddel dir1 dir2

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

Antwort4

Verwenden 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

verwandte Informationen