尋找並刪除 2 個目錄之間的所有相同檔案(按名稱)

尋找並刪除 2 個目錄之間的所有相同檔案(按名稱)

我想找到dir1中與dir2中具有相同文件名的所有文件,並將它們從dir1中刪除。

例如:

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

所以我想從dir1 first.txt文件中刪除。

如何使用 Bash 終端實現這一點? (不是有for循環等的腳本或像「fdupes」這樣的第 3 方程式)

答案1

處理有空格的檔名:

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

答案2

另一個快速方法,也沒有顯式循環。不要忘記,您可以在前面加上rm -fwithecho來測試這一點。

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

您可以將其放入腳本中,替換dir1"$1"dir2"$2"

答案3

快速回答...

#!/bin/bash
#finddel dir1 dir2

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

答案4

使用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

相關內容