トップレベルフォルダ(1)はルートフォルダです。
フォルダの上部(1)にはフォルダの上部(2)のみが含まれています。
トップレベルフォルダ(2)には、トップレベルフォルダ(3)、(4)、(5)、(6)、(7)、(8)、(9)、(10)が含まれています。
親フォルダ(3)〜(10)にはフォルダとファイルが含まれています。
私がやりたいことは、トップフォルダがトップレベルフォルダ(1)になるようにトップレベルフォルダ(3)を1つ上のレベル(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
「ブック」変数が各本の名前で解決されるように、前述のルートフォルダでこのコマンドを実行する必要があります。
ソリューションはこのように動作します。書籍ごとに、配列変数 "topdir" を使用して最上位のディレクトリ名を読み込みます。そこから最上位ディレクトリの下の章ディレクトリのリストを取得します。その後、章の目次を渡してmv
1 レベル上に移動します。完了したら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