디렉토리를 평면화하기 위해 쉘 스크립트를 작성하는 방법은 무엇입니까?

디렉토리를 평면화하기 위해 쉘 스크립트를 작성하는 방법은 무엇입니까?

나는 이 명령을 사용하여 디렉토리에서 쓸모없는 파일을 삭제하는 간단한 스크립트를 작성했습니다 find.

이제 스크립트에 줄을 추가하여 디렉터리를 평면화할 수 있는지 알고 싶지만 그럴 수 없습니다.완전히으스러졌습니다.

예를 들어 다음과 같은 큰 디렉터리가 있는 경우 cleantarget:

  • 청소 대상
    • 폴더 A
      • 폴더 A1
      • 폴더 A2
    • 폴더 B
      • 폴더 B1
        • 폴더 B11

최종 결과는 다음과 같습니다.

  • 청소 대상
    • 폴더 A
    • 폴더 B

나는 결과가 다음과 같기를 원하지 않습니다.

  • 청소 대상
    • 내 모든 파일

디렉토리에는 16000개의 파일이 있으므로 디렉토리가 다시 복잡해질 때 가끔 실행할 수 있도록 스크립트를 사용하는 것이 가장 좋습니다.

어떻게 해야 하나요?

편집: 본질적으로 이는 다음을 의미합니다. 주어진 대상 디렉토리 내의 각 하위 디렉토리를 개별적으로 평면화하는 스크립트를 원합니다. 즉, 폴더 A를 평면화하고, 폴더 B를 평면화하고, 폴더 C를 평면화하는 방식으로 cleanfolder그 안에 있는 모든 디렉터리가 평면화될 때까지 계속됩니다.

답변1

다음 줄이 작동해야 합니다.

find "/path/to/cleantarget" -maxdepth 1 -mindepth 1 -type d | while read line; do
    find "${line}" -mindepth 2 -type f -exec mv -t "${line}" -i '{}' +
    rm -r "${line}"/*/
done

이렇게 하면 폴더 A와 폴더 B가 병합되고 중복 항목을 덮어쓸지 묻는 메시지가 표시된 다음 폴더가 삭제됩니다.

원천:https://unix.stackexchange.com/a/52816/284212

관련 정보