複数のフォルダやファイルを一括で作成する便利なコマンドの使い方とテクニック
Macのターミナルを使ったUNIXコマンド操作は慣れると普段の作業が激的に早くなります。
一番基礎的なコマンドでの作業としてはディレクトリを移動してフォルダやファイルを作成したりでしょうか。
ここで少し便利なテクニックをご紹介します。
複数のフォルダやファイルを一括で作成する方法です。
作業の中で10個、20個とフォルダやファイルを作成する時は、パソコンの画面上で右クリックしてフォルダの作成という流れですが、10回、20回、もっと作業が多ければけっこう時間がかかるものです。
フォルダやファイルに名前もつける作業もありますし。
そこで今回は、複数のフォルダやファイルを連番にして一括で作成してみようと思います。
そしてもうひと工夫、複数のフォルダ番号にあった番号のファイルを一つ一つ入れていくというもの。
連番フォルダとファイルの作成
まずは、複数のフォルダを作成して、各フォルダの中にメモ用のテキストファイルを作成する方法です。
ディレクトリを作成するmkdirコマンドや空のファイルを作成するtouchコマンドの他、「{}」を使ったブレース展開機能を使います。
mkdir Lesson{1..15} && touch Lesson{1..15}/memo.txt
以下、実際のコマンドです。
ぼかしが入っている箇所はコンピュータ名やユーザー名になります。
丁寧にcdコマンドで移動したらpwdコマンドで現在のディレクトリを確認しています。
サンプルとして、デスクトップに「dirsample」というフォルダを作成してその中に複数のフォルダと各フォルダへのファイルを作成していきます。
mkdirコマンドでLessonというフォルダを作成するのですが、ここでブレース展開し「{}」に必要な文だけの数字を入れます。
サンプルではLesson1〜Lesson15までのフォルダを作成するので「{1..15}」とします。要するに1から15までの連番でLessonフォルダを作るわけです。
そのあと「&&」を使うことで、コマンドを複数繋げることができます。
touchコマンドで先程使ったブレース展開で各Lessonフォルダの中に「memo.txt」というファイルを作成していきます。
これで、各番号のLessonフォルダの作成と各フォルダ内にメモ用のテキストファイルを作成することができました。
1つ1つフォルダを名前を付けて作成してテキストファイルを作成してと面倒くさい作業も、たった一行のコマンドを実行するだけで一瞬で作成することができます。
めちゃめちゃ早いですね。
今回のサンプルは何かを学んでいる人が学習用にディレクトリやメモを作っておくと良いのではないでしょうか。
まぁ、大学ですと15回の講義にちょうどいいかと。
もう少し改良してみましょう。
連番フォルダと各番号ファイルの作成
メモを見ている時にどのmemo.txtを開いているか分かりづらいから、メモテキストのファイル名にも番号を入れたファイル名にしたいという場合に対応したコマンドもご紹介。
先程のコマンドの他、「forコマンド」というものを使っていきます。
プログラミングでよくあるfor文ですね。
forコマンドの構文はこちら。
for ((初期化; 条件式; 変化式)); do コマンド; done
forコマンドの式
for ((i=1; i<=15; i++));
プログラミングを少しかじっている方はforコマンドの使い方はすぐに理解できると思いますが、一般の方のために一応forコマンドを説明します。
forコマンドは一定回数の繰り返し処理を行うプログラムで、for文の()内では「初期化; 条件式; 変化式」を設定します。
初期化では変数「i」を1としておいて、条件式で比較演算子を利用して変数iが15以下であれば処理を実行します。
変化式でインクリメント演算子「++」で変数「i」を1ずつ足していくという式です。
変数iが15以下になるまで繰り返し処理をします。15回処理が繰り返されるわけです。
このforコマンドを使って後に続くコマンドを実行します。
mkdir Lesson{1..15} && for ((i=1; i<=15; i++)); do touch Lesson${i}/Lesson${i}_memo.txt; done
始めのコマンド「mkdir Lesson{1..15}」は先程と同じでLesson1〜Lesson15までのフォルダを作成。
後に続くコマンドで、for文を使ってdoとdoneの間の処理を15回実行します。
ここでforコマンドの変数「i」の数値が1〜15と繰り返し処理の中で増えていくので、それをtouchコマンドでも利用してLessonフォルダやmemo.txtに活用します。
変数は「${i}」のように「$」ドルマークと「{}」波括弧の中に変数名「i」とすることで展開できます。
こうすることで連番の各フォルダに対して、1つずつLesson1_memo.txt、Lesson2_memo.txtといったわかりやすい名前のファイルを作成することができます。
これもたった一行のコマンドでできちゃうんです。
またfor文は以下のような書き方もできます。
mkdir Lesson{1..15} && for i in {1..15}; do touch Lesson${i}/Lesson${i}_memo.txt; done
この場合のforコマンドの構文はこちら。
for 変数 in 値; do コマンド; done
変数の宣言をしてinの後に利用したい値を入れます。
今回はブレース展開を使った値ですね。
あとは一緒でdoとdoneの間の処理を実行する流れです。
ついでにもう1つ、
あらかじめdirsampleフォルダを作成してからコマンドで作成する流れは説明しましたが、dirsampleもいっぺんに作る方法も。
デスクトップに移動してから以下のコマンドを打ちます。
mkdir -p dirsample/Lesson{1..15} && for ((i=1; i<=15; i++)); do touch dirsample/Lesson${i}/Lesson${i}_memo.txt; done
今までと違う部分は、最初のmkdirの後にペアレント「-p」というオプションを付けています。
デスクトップにはdirsampleフォルダは存在しないのでその下の階層にLessonフォルダを作成できません。
そこでペアレント「-p」オプションをつけて親ディレクトリのdirsampleも作ってしまうというところです。
その後のコマンド、do touchのあとで親ディレクトリとして作成したdirsampleもディレクトリ構造に含めてLessonフォルダやテキストファイルを作成する流れです。
こうすることで、dirsampleからメモファイルまでの3構造のディレクトリを一括で作成できます。
今回はサンプルとしてdirsampleというフォルダ名で作業をしてきましたが、自分がどんなディレクトリ管理をするかによって
mkdir -p プログラミング学習/Lesson{1..15} && for ((i=1; i<=15; i++)); do touch プログラミング学習/Lesson${i}/Lesson${i}_memo.txt; done
みたいな感じでディレクトリを作ってみてもいいですね。
複数のコマンドをあわせた一行のコマンドで便利なディレクトリの構築ができることがわかってもらえたかと思います。
大変便利ですのでこういった複雑なディレクトリを構築することがある際に、是非試してみてください。
以上、複数のフォルダやファイルを一括で作成する方法でした。
Windowsユーザーの方は、以下の記事でご紹介しています。