나는 그 안에 일부 파일이 포함된 2개의 디렉토리(test1 및 test2)를 가지고 있습니다. bash를 작성하여 이러한 디렉터리에서 중복된 파일 이름과 파일 크기를 찾고 그 중 하나를 디렉터리에서 제거하려면 어떻게 해야 합니까?
답변1
원하는 작업을 수행하는 명령은 다음과 같습니다.
for f in test1/*; do find test2 -name $(basename $f) -size $(stat -c %s $f)c -delete; done
설명하다:
for f in test1/*
: test1의 각 파일을 반복합니다.$(basename $f)
: 루프에 의해 전달된 파일의 기본 이름을 반환합니다.$(stat -c %s $f)
: 반복되는 파일의 크기를 반환합니다.c
블록 끝에는stat
출력이 바이트로 읽혀지도록 되어 있습니다.find
find test2 -name $(basename $f) -size $(stat -c %s $f)c -delete
: 일치하는 파일을 찾아 삭제합니다.-delete
테스트 실행의 경우 이 -delete
플래그를 무시하세요.
참고: 내장 stat
명령이 이 플래그를 지원하지 않기 때문에 MacOS에서는 작동하지 않습니다 -c
. 대신 stat의 gnu 버전을 설치하세요.