디렉터리 구조의 마지막 두 하위 폴더를 반대로 바꿉니다.

디렉터리 구조의 마지막 두 하위 폴더를 반대로 바꿉니다.

기본적으로 다음 Windows 질문과 같이 마지막 두 하위 폴더를 되돌리기 위해 유닉스 방식(bash, Perl 등)을 요청합니다. https://superuser.com/questions/221/how-can-i-invert-a-directory-struct 이는 예제이며, 다수의 파일 경로를 수정하는 것이 목적입니다.

i.e. 
/dir1/dir2/dir3/dir4/myfile
to:
/dir1/dir2/dir4/dir3/myfile

답변1

4개의 하위 디렉터리가 있는 솔루션의 경우 다음과 같이 사용할 수 있습니다.

for p4 in */*/*/*
do
    p3="${p4%/*}" p2="${p3%/*}" d4="${p4/*\/}" d3="${p3/*\/}"
    mv "$p4" "$p3/$d3" && mv "$p3" "$p2/$d4"
done

전치를 시도하기 전에 대상 디렉터리가 존재하는지 여부를 오류 검사하지 않습니다. 이 경우 중복된 세 번째 수준 디렉터리가 생성됩니다. 예를 들어 가 a/b/d존재하고 를 전치하려고 하면 a/b/c/d로 끝납니다 a/b/d/c/c.

일치하는 디렉터리가 너무 많으면 */*/*/*각 수준에서 추가 루프를 사용하여 더 분할할 수 있습니다. 이렇게 하면 $p2경로 합계를 내보낼 필요가 없어집니다 $p3.

관련 정보