명령줄에서 디렉터리 B의 디렉터리 A에 있는 일치하는 파일을 어떻게 삭제할 수 있습니까?

명령줄에서 디렉터리 B의 디렉터리 A에 있는 일치하는 파일을 어떻게 삭제할 수 있습니까?

내 디렉토리에 중복 파일이 몇 개 있습니다 A. bash에서 파일 이름을 사용하여 중복 파일을 제거하려면 B어떻게 해야 합니까 ?BA

다른 쉘에서 이를 수행하는 방법은 환영할 만한 보너스입니다.

답변1

일방 통행:

#!/bin/bash
cd ~/B
for file in ~/A/*
do
    file1=$(basename "$file")
    [ -f "$file1" ] && { echo "deleting $file1 "; rm -- "$file1"; }
done

답변2

연속해서

grep -f <(ls "A") <(ls "B") | xargs -I'{}' rm "B/{}"

그러나 파일 이름에 따라서만 작동하며 빈 하위 디렉터리에 영향을 줄 수 있습니다. 이를 find -type f -maxdepth 1방지 하려면 ls.

보다 안전한 확인을 위해서는 @KasyA 수신자를 사용하세요.

답변3

find /path/to/dirA -type f -exec cmp -s '{}' '/path/to/dirB/{}' \; -exec echo rm -v '/path/to/dirB/{}' \;

테스트 중:

$ ls -1 /path/to/dirA
dupfile
file1inA

$ ls -1 /path/to/dirB
dupfile
file1inB

find /path/to/dirA -type f -exec cmp -s '{}' '/path/to/dirB/{}' \; -exec echo rm -v '/path/to/dirB/{}' \;
rm -v /path/to/dirB/./dupfile

참고: echo테스트 실행을 위해 제거되었습니다.

답변4

cd B

ls ../
A
B

comm <(ls ../A) <(ls ./) -1 -2 -z | xargs -0 rm

comm세 개의 열을 표시합니다.

  1. 파일1(A) 특정
  2. file2(B) 고유
  3. 둘 다 존재한다

따라서 열 1과 2를 삭제합니다 -1 -2. -zNULL은 구분 기호로 사용됩니다. 기본값은 "\n" 개행 문자입니다.

NULL로 구분된 전송은 파이프 및 임의의 문자열 목록(예: 파일 이름)을 처리할 때 안전합니다.

관련 정보