두 디렉터리 동기화: 동일한 파일 이름, 다른 파일 끝, 다른 파일 내용

두 디렉터리 동기화: 동일한 파일 이름, 다른 파일 끝, 다른 파일 내용

하위 디렉터리가 있는 폴더가 2개 있습니다. 하나는 학습 이미지가 있고 다른 하나는 학습 라벨이 있습니다.

  • 이미지는 정확히 하나의 태그에 속합니다.
  • 이미지와 라벨 내용이 다릅니다.
  • 이미지와 태그는 비슷한 경로에서 찾을 수 있습니다. 예를 들어:
    • 그림/18/1334/image1.웹 문서
    • 상표/18/1334/image1.PNG
  • 파일 이름(확장자 아님)이 동일합니다.
  • 하위 디렉터리에 여러 파일이 있을 수 있습니다.

해당 이미지가 없는 모든 태그를 어떻게 제거할 수 있나요(또는 그 반대의 경우도 마찬가지)? 예를 들어:

그림:

.
|---18
     |---a1
     |    |---a1.webp
     |    |---a11.webp
     |---a2
     |    |---a2.webp
     |---a3

상표

.
|---18
     |---a1
     |    |---a1.png
     |    |---a11.png
     |---a2
     |    |---a2.png
     |---a3
          |---a3.png  

좋은 해결책(해당 태그나 이미지가 없으면 파일을 삭제하세요):

.
|---18
     |---a1
     |    |---a1.*
     |    |---a11.*
     |---a2
     |    |---a2.*
     |---a3

최상의 솔루션(현재 비어 있는 폴더도 삭제):

.
|---18
     |---a1
     |    |---a1.*
     |    |---a11.*
     |---a2
          |---a2.*

별표 *는 webp 또는 png를 나타냅니다.

답변1

그리고 :findbash

cdand 의 상위 디렉터리로 이동하여 다음을 실행 images합니다 labels.

find . \( -name "*.webp" -o -name "*.png" \) -type f -exec bash -c '
if [ "${1##*.}" = "webp" ]; then
  file=${1/\/images\//\/labels\/} 
  file=${file%webp}png
else
  file=${1/\/labels\//\/images\/}
  file=${file%png}webp
fi
[ ! -f "$file" ] && echo rm "{}"
' bash {} \;

echo실제로 파일을 삭제하려면 삭제를 해야 합니다 .

빈 디렉터리를 삭제하려면 다음을 참조하세요.하위 트리에서 빈 디렉터리를 모두 제거하는 방법은 무엇입니까?.

관련 정보