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 -l
rm -v
테스트 후 원하는 대로 작동하면 로 변경해야 합니다.
rsync
물론 더 좋습니다. 그러나 이것은 또 다른 변형일 뿐이다.