![디렉터리 차이점 및 삭제](https://linux55.com/image/43904/%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EC%B0%A8%EC%9D%B4%EC%A0%90%20%EB%B0%8F%20%EC%82%AD%EC%A0%9C.png)
구조를 유지하면서 디렉터리 B의 파일과 동일한(동일한 이름 및 동일한 해시) 모든 파일을 디렉터리 A에서 (반복적으로) 삭제하는 쉬운 방법이 있습니까?
예를 들어 B/file1이 있으면 A/file1은 삭제되지만 B/d/file1은 있어도 A/file1은 삭제되지 않습니다.
답변1
A의 모든 파일이 B에 존재하도록 하려면 rsync
이 --remove-source-files
옵션을 사용하여 B의 파일과 A의 파일을 추가/업데이트한 다음 A에서 원본 파일을 삭제하면 됩니다. rsync
모드에서 실행하고 를 --dry-run
통해 출력을 파이핑하며 두 디렉터리 구조만 비교하고 동일한 파일을 삭제합니다. 다음을 참조하세요.grep
xargs
rm -f
Linux/Unix rsync: 전송 후 소스 파일 삭제
rsync --remove-source-files는 소스 파일을 하나씩 삭제합니까, 아니면 rsync가 완료된 후 삭제합니까?
답변2
이런 식으로 할 수 있습니다. 이 코드는 테스트되지 않은 코드입니다. 나는 $A와 $B가 두 개의 디렉토리라고 가정합니다.
(cd $B && find . -type f -print) | (cd $A && while read f; do /bin/rm -f "${f}"; done;)
방금 이것을 시도했지만 명령을 실행하는 대신 stdout에 에코하여 제대로 작동하는 것 같았습니다.
$ (cd $B && find . -type f -print) | (cd $A && while read f; do echo /bin/rm -f "${f}";done;)
/bin/rm -f ./1
/bin/rm -f ./2
/bin/rm -f ./3
/bin/rm -f ./4
원하는 결과가 나타나면 다시 실행하되 명령에서 "echo"라는 단어를 생략하세요.