Linux의 두 디렉터리 사이에서 누락된 파일 이름 찾기

Linux의 두 디렉터리 사이에서 누락된 파일 이름 찾기

Linux에서 2개의 디렉터리(A/B)를 비교하고 A에 존재하지 않는 B의 파일을 삭제하려고 합니다.

예를 들어 "1.jpg" 파일이 B 디렉터리에는 있지만 A 디렉터리에는 없으면 B에서 삭제해야 합니다.

diff를 사용해 보았지만 모든 파일이 본질적으로 다르기 때문에 작동하지 않는 것 같습니다. (크기는 다르지만 ID는 동일한 썸네일입니다.) 따라서 이는 파일의 실제 내용을 무시하고 파일 이름만을 통해서 수행되어야 합니다.

최소한의 노력으로 이 작업을 수행하는 방법을 알려줄 수 있는 사람이 있습니까?

답변1

rsync원하는 작업을 빠르고 쉽게 수행할 수 있습니다.

rsync --dry-run --verbose --recursive --existing --ignore-existing --delete-after A/ B/

도움말에서:

 --existing              skip creating new files on receiver
 --ignore-existing       skip updating files that already exist on receiver
 --delete                delete extraneous files from destination dirs

dry-run제안된 결과에 만족하면 실제로 제거를 수행하는 옵션을 제거하십시오.


매뉴얼 페이지에는 옵션에 대한 더 명확한 설명이 있으며 사용 사례도 언급되어 있습니다.

   --existing, --ignore-non-existing
      This  tells rsync to skip creating files (including directories)
      that do not exist yet on the destination.   If  this  option  is
      combined  with  the  --ignore-existing  option, no files will be
      updated (which can be useful if all you want to do is to  delete
      extraneous files).


   --ignore-existing
      This  tells  rsync  to skip updating files that already exist on
      the destination (this does not ignore  existing  directores,  or
      nothing would get done).  See also --existing.

답변2

첫 번째 수준 디렉터리의 경우

diff -u <(ls A) <(ls B) | sed -n '4,$s/^+//p' | xargs -I{} ls -l B/{}

ls -lrm -v테스트 후 원하는 대로 작동하면 로 변경해야 합니다.

rsync물론 더 좋습니다. 그러나 이것은 또 다른 변형일 뿐이다.

관련 정보