중첩된 디렉토리 평면화 & Mac OS X 명령줄의 파일 계층 구조
디렉토리 하위 폴더의 모든 파일 내용을 단일 폴더로 이동하여 디렉토리 구조를 평면화해야 했던 적이 있습니까? Mac OS X 또는 Linux의 파일 시스템에서 파일과 폴더를 이동하여 수동으로 이 작업을 수행할 수 있지만 더 빠른 옵션은 명령줄로 전환하는 것입니다. 아마도 어느 시점에서 모든 파일을 중첩된 폴더에서 다시 단일 디렉토리로 이동하여 실행 취소해야 하는 중첩된 디렉토리 계층 구조를 만들었거나 이유가 무엇이든 디렉토리 구조를 단순화하려고 할 수 있습니다. 트릭은 아주 잘 작동합니다.
명령줄을 사용하여 파일 및 디렉토리 구조를 평평하게 만드는 것은 일반적으로 터미널 사용에 익숙한 고급 사용자에게 가장 적합합니다. 해당 사항이 없다면 Finder를 통해 수동으로 수행하는 것을 고려하십시오. , 또는 Mac Automator 앱을 사용하여 유사한 파일 시스템 활동 자동화를 수행합니다. 그러나 여기에서는 명령줄에서 디렉토리 평면화에 초점을 맞추고 있습니다.
중첩된 파일 디렉토리 평면화의 예
우리가 달성하려는 것을 더 잘 이해하기 위해 사용자 홈 폴더에 있는 TestDirectory라는 가상 디렉토리 구조를 예로 들어 보겠습니다. 이 예에서 TestDirectory에는 SubDirectory1, SubDirectory2, SubDirectory3 등과 같은 하위 폴더가 포함되어 있으며 각각 해당 폴더에 파일이 있습니다. 여기서 우리가 하려는 것은 디렉토리 구조를 평탄화하여 SubDirectory(X)의 모든 파일을 상위 디렉토리 "TestDirectory"로 이동하는 것입니다.재귀적으로 표시되는 초기 디렉토리 및 내용은 다음과 같습니다.
$ find ~/TestDirectory/ -type f ~/TestDirectory/rooty.jpg ~/TestDirectory/SampleDirectory1/beta-tool-preview.jpg ~/TestDirectory/SampleDirectory1 /alphabeta-tool.jpg ~/TestDirectory/SampleDirectory2/test-tools.jpg ~/TestDirectory/SampleDirectory3/test-png.jpg ~/TestDirectory/SampleDirectory3/test1.jpg ~/TestDirectory/SampleDirectory3/test2.jpg
이 디렉토리와 하위 디렉토리 내용을 다시 TestDirectory 폴더로 병합하려면 다음 명령 문자열을 사용합니다.
find TargetDirectory/ -mindepth 2 -type f -exec mv -i '{}' TargetDirectory/ ';'
디렉토리 내용을 병합한 후 나열하면 다음과 같아야 합니다.
~/TestDirectory/rooty.jpg ~/TestDirectory/beta-tool-preview.jpg ~/TestDirectory/alphabeta-tool.jpg ~/TestDirectory/test-tools .jpg ~/TestDirectory/test-png.jpg ~/TestDirectory/test1.jpg ~/TestDirectory/test2.jpg
하위 디렉토리는 여전히 존재하며 비어 있을 뿐입니다. 말이 되나요? 그렇지 않은 경우 또는 수행하려는 작업이 표시되지 않는 경우 디렉토리를 병합하고 싶지 않을 수 있습니다. 다른 위치에 복잡한 복사를 수행하기 위해 병합하거나 ditto를 사용하는 것일 수 있습니다.
명령줄을 사용하여 디렉토리 구조 및 중첩 파일 계층 구조 평면화
진행할 준비가 되셨습니까? 디렉토리 구조를 평평하게 하고 하위 디렉토리에서 대상 디렉토리의 기본으로 모든 파일을 이동하는 데 사용할 명령 문자열은 다음과 같습니다.
find -mindepth 2 -type f -exec mv -i '{}' ';'
위의 예에서 설명한 것처럼 평면화할 디렉토리로 교체하십시오.
예, 디렉토리는 명령 문자열에 두 번 나타납니다. 첫 번째는 하위 디렉토리를 병합하기 위해 검색되는 디렉토리이고 두 번째는 찾은 항목의 대상입니다.
지정된 대상을 정확하게 지정해야 합니다. 이는 되돌릴 수 없기 때문입니다(적어도 사용자 측에서 많은 수동 작업 없이는 가능). 대상 디렉토리 하위 디렉토리의 모든 파일을 대상 루트 폴더로 다시 보냅니다.
앞서 언급했듯이 OS X의 Finder에서도 이 작업을 수행하거나 적어도 Finder에서 파일 및 폴더 변경 사항을 관찰할 수 있습니다. 목록 보기에서 작은 화살표를 Option+클릭하면 모든 하위 디렉토리가 열리고 다음과 같은 폴더 계층이 표시됩니다.
다양한 bash 및 zsh 대안을 만지작거린 후 StackExcange의 댓글 작성자가 이 편리한 트릭을 남겼고 결국 가장 쉽고 가장 호환되는 방법이 되었습니다. 중첩된 디렉토리를 평면화하는 더 좋은 방법을 알고 있다면 댓글로 알려주세요!