オートメーションを使用してサブフォルダとそのコンテンツを1レベル上に移動し、複数のフォルダから空のフォルダを削除します。

オートメーションを使用してサブフォルダとそのコンテンツを1レベル上に移動し、複数のフォルダから空のフォルダを削除します。

トップレベルフォルダ(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" を使用して最上位のディレクトリ名を読み込みます。そこから最上位ディレクトリの下の章ディレクトリのリストを取得します。その後、章の目次を渡してmv1 レベル上に移動します。完了したらrmdirrmdir空でないディレクトリは削除が拒否されるため、セーフティネットです。

以下は、コマンドを実行する前後のディレクトリ構造を示すデモです(このシステムにはコマンドがないため、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

おすすめ記事