모든 하위 디렉터리를 현재 디렉터리로 이동하는 방법은 무엇입니까?

모든 하위 디렉터리를 현재 디렉터리로 이동하는 방법은 무엇입니까?

저는 쉘 스크립트 프로그래밍을 처음 접했습니다. 다음과 같은 파일 계층 구조가 있다고 가정합니다.

/A/B/C/D
/A/B/E/F/G
/A/H/I
/A/H/J/K

여기에는 /A/B/.., 뿐만 아니라 /A/H/.... 모든 문자는 디렉토리입니다. 계층 구조를 다음과 같이 변환하고 싶습니다.

/A/B/C
/A/B/D
/A/B/E
/A/B/F
/A/B/G
/A/H/I
/A/H/J
/A/H/K

즉, 깊이가 2보다 큰(dir A의 깊이는 0임) 모든 디렉터리를 깊이 2로 이동합니다. JAVA와 C를 사용하여 구현할 수 있지만 너무 느립니다. 쉘 스크립트를 사용하여 구현하는 방법을 아는 사람이 있습니까?

의사 코드는 다음과 같습니다.

for each directory D in current directory A // A may have more than one subdirectories
    for each directory d in D
        for each object in d
            if object is a directory
                move object and all descendant subdirectories of object to /A/D;
            end if
        end for
    end for
end for

답변1

for dir in /A/*; do
    find "$dir" -mindepth 2 -depth -type d -exec mv -t "$dir" -- {} +
done

이는 ( ) 깊이 우선( ) 아래 최소 2개 수준의 find모든 디렉터리( )를 검색하도록 지시합니다 . 찾은 각 개체에 대해 실행됩니다 . 항상 그렇듯이 소스 디렉터리를 기존 대상 디렉터리에 병합하는 것을 허용하지 않습니다(그러나 이를 해결할 수 있는 방법이 있습니다).-type d-mindepth 2$dir-depthmv -t "$dir" -- <SRC>mv

관련 정보