2개의 디렉토리에서 중복 파일 제거

2개의 디렉토리에서 중복 파일 제거

기본적으로 동일한 내용의 파일이 포함된 두 개의 폴더(하위 폴더 포함)가 있습니다.

예:

  • /folder/files/data/new
  • /folder/files/data/old

/old에 이미 존재하는 /new의 모든 파일을 삭제하는 방법이 있습니까?엄격한 파일 이름(수정되지 않은 날짜) 중복된 파일을 다시 읽는 것을 방지합니다.

답변1

아래 코드는 old디렉터리뿐만 아니라 해당 하위 디렉터리도 검색하고 new디렉터리에서 동일한 이름과 경로를 가진 파일을 제거합니다. 이는 모든 악성 파일 이름(공백, 줄바꿈 등)에 적용됩니다.

cd /folder/files/data/old || { echo "Failed to get in correct directory" ; exit 1 ; }
find . -type f -exec rm -f ../new/{} \;

이 매개변수는 디렉토리가 아닌 파일을 찾도록 -type f지시합니다 . find-exec ... \;매개변수는 파일이 에서 발견되면 find하위 디렉토리의 해당 파일에서 old명령이 실행되어야 함을 알려줍니다.rm -fnew

rm이 옵션이 주어지기 때문에 -f존재하지 않는 파일은 자동으로 무시됩니다. 이렇게 하면 new파일을 삭제하기 전에 파일이 존재하는지 테스트할 필요가 없습니다 . 또한 파일을 삭제하기 전에 메시지가 표시되지 않습니다. 이는 많은 수의 파일을 삭제할 때 매우 편리합니다. 하지만,이 스크립트를 실행하기 전에 해당 파일을 정말로 삭제할 것인지 확인하세요.. 보호를 위해 cd명령이 실패하면 스크립트가 오류와 함께 종료됩니다.

관련 정보