두 디렉터리 사이에서 이름으로 동일한 파일을 모두 찾아 삭제합니다.

두 디렉터리 사이에서 이름으로 동일한 파일을 모두 찾아 삭제합니다.

dir2에서 동일한 파일 이름을 갖는 dir1의 모든 파일을 찾아 dir1에서 삭제하고 싶습니다.

예를 들어:

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

dir1 first.txt그래서 파일 에서 제거하고 싶습니다 .

Bash 터미널을 사용하여 이를 달성하는 방법은 무엇입니까? ( for루프 등이 있는 스크립트 또는 "fdupes"와 같은 타사 프로그램이 아님)

답변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 -f접두사 를 붙일 수 있다는 것을 잊지 마십시오 .echo

( 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

관련 정보