최상위 폴더(1)는 루트 폴더입니다.
폴더 상단(1)에는 폴더 상단(2)만 포함됩니다.
최상위 폴더(2)에는 최상위 폴더(3), (4), (5), (6), (7), (8), (9), (10)이 포함되어 있습니다.
상위 폴더 (3)~(10)에는 폴더와 파일이 포함되어 있습니다.
내가 하고 싶은 일은 상위 폴더가 최상위 폴더(1)가 되도록 최상위 폴더(3)를 한 수준 위(10)로 이동하는 것입니다. 그런 다음 동일한 명령을 사용하여 현재 비어 있는 최상위 폴더를 삭제합니다(2).
하단 폴더(1)에는 삭제된 폴더를 포함하여 원하는 폴더 구조가 표시됩니다.
보너스: 이와 같은 수백 개의 폴더가 포함된 루트 폴더가 있습니다. 따라서 해당 루트 폴더에 있으면 최상위 폴더(1)와 다른 여러 폴더가 표시됩니다. 나의 이상적인 솔루션은 각 폴더를 통과하여 아래와 같이 폴더 구조를 변경하는 bash 라인이나 스크립트를 만들 수 있는 것입니다.
(1)->Packt.Learn.Javascript.and.HTML5.Canvas.Build.a.Paint.App.for.Drawing/
(2)->LearnJavascriptandHTML5Canvas-BuildaPaintAppforDrawing[Video]
(3)->1.Introduction/
(4)->2.Algorithm of the game app/
(5)->3.HTML5 Building Blocks of the App/
(6)->4.Styling the Drawing_Paint app - achieving the final look/
(7)->5.[OPTIONAL] Javascript Basic Concepts (related to this project)/
(8)->6.[OPTIONAL]HTML5 Canvas Basic Concepts(related to this project)/
(9)->7.Javascript code for the app - Making the app work/
(10)->Exercise Files/
(1)->Packt.Learn.Javascript.and.HTML5.Canvas.Build.a.Paint.App.for.Drawing/
(2)->1.Introduction/
(3)->2.Algorithm of the game app/
(4)->3.HTML5 Building Blocks of the App/
(5)->4.Styling the Drawing_Paint app - achieving the final look/
(6)->5.[OPTIONAL] Javascript Basic Concepts (related to this project)/
(7)->6.[OPTIONAL] HTML5 Canvas Basic Concepts (related to this project)/
(8)->7.Javascript code for the app - Making the app work/
(9)->Exercise Files/
답변1
레이블 이 있으므로 bash
여기에 bash 배열을 사용하는 솔루션이 있습니다.
for book in *; do topdir=($book/*); chapters=("${topdir[0]}"/*); mv "${chapters[@]}" "$book"; rmdir "${topdir[0]}"; done
"book" 변수가 각 책의 이름으로 확인되도록 언급한 루트 폴더에서 이 명령을 실행해야 합니다.
솔루션은 이런 식으로 작동합니다. 각 책에 대해 배열 변수 "topdir"을 사용하여 최상위 디렉토리 이름을 읽습니다. 거기에서 최상위 디렉터리 아래의 장 디렉터리 목록을 가져옵니다. 그런 다음 장 목차를 전달하여 mv
한 수준 위로 이동합니다. 완료되면 rmdir
. rmdir
비어 있지 않은 디렉토리는 삭제가 거부되므로 안전망입니다.
다음은 명령을 실행하기 전과 후의 디렉터리 구조를 보여주는 데모입니다(이 시스템에는 명령이 없으므로 tree
출력은 다음과 같습니다 find
).
앞으로:
$ find .
.
./Learn.Javascript.and.HTML5
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/1.Introduction
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/2.Algorithm of the game app
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/3.HTML5 Building Blocks of the App
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/4.Styling the Drawing_Paint app - achieving the final look
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/5.[OPTIONAL] Javascript Basic Concepts (related to this project)
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/6.[OPTIONAL]HTML5 Canvas Basic Concepts(related to this project)
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/7.Javascript code for the app - Making the app work
./Learn.Javascript.and.HTML5/LearnJavascriptandHTML5Canvas[Video]/Exercise Files
뒤쪽에:
$ find .
.
./Learn.Javascript.and.HTML5
./Learn.Javascript.and.HTML5/1.Introduction
./Learn.Javascript.and.HTML5/2.Algorithm of the game app
./Learn.Javascript.and.HTML5/3.HTML5 Building Blocks of the App
./Learn.Javascript.and.HTML5/4.Styling the Drawing_Paint app - achieving the final look
./Learn.Javascript.and.HTML5/5.[OPTIONAL] Javascript Basic Concepts (related to this project)
./Learn.Javascript.and.HTML5/6.[OPTIONAL]HTML5 Canvas Basic Concepts(related to this project)
./Learn.Javascript.and.HTML5/7.Javascript code for the app - Making the app work
./Learn.Javascript.and.HTML5/Exercise Files