bashでディレクトリ構造をコピー ペースト!for文で変数を回す初心者向けの説明

スポンサーリンク
pythonやプログラミングへの挑戦
スポンサーリンク

ディレクトリをコピーアンドペーストして、

フォルダ名を微妙に変えていきたい場合ってありますよね。

例えば、dir1というディレクトリがあった場合に、

これをコピーアンドペーストしてdir1_copyを作り、

さらに名前を変更してdir2にする。

次に、もう一度dir1をコピーアンドペーストしてdir1_copyを作り、

さらに名前を変更してdir3にする。

こんなことを手動でやっていては、

時間がもったいなさすぎます。

 

そこで、bashやzshを利用して、

シェルスクリプトによって自動化する方法をお教えします。

 

これらは、コンピュータを扱う上で非常に重要なものです。

 

この記事を読んで、一歩進んだ知識を身につけましょう!

 

スポンサーリンク

 

スポンサーリンク

bashでディレクトリ構造をコピー ペースト!for文で変数を回す初心者向けの説明

そもそもbashとは何か?.bashrcや.bash_profileを使う

bashとは何か?、については、以前解説しました↓

意外とあいまいになりがちだと思うので、ぜひご覧になってみてください。

 

【2021】bashとzsh、違いや互換性は?移行時の切り替え方は?戻す方法は?bashとは何?zshとは何?【わかりやすく】
【2021】bashとzsh、違いや互換性は?移行時の切り替え方は?戻す方法は?bashとは何?zshとは何?【わかりやすく】 bashとは何?zshとは何? bashやzshはシェルの種類です。 以前の記事でお伝えしたように、C...

 

スポンサーリンク

 

bashの設定を毎回手で入力するのは面倒ですよね?

 

例えば、これから先何回も使うような新しい変数を設定したい場合。

毎回それを手で打ち込んでいたのでは、らちがあきません。

 

そこで、欲しい設定を全て一箇所にまとめて書いておけば、そのファイルを実行するだけで欲しい環境が整うわけです。

.bashrcや.bash_profileは、欲しい設定を全て書いておくためのファイルです。

.bashrcや.bash_profileに関しては、

こちらの記事で詳しく解説しています。

.bashrc .bash_profileとは?編集、反映、おすすめの書き方は?pathはどこ?違いは?いつ読み込まれる?使い分けは?
コンピュータを扱っていると頻繁に目にする .bashrc .bash_profile とは、一体なんでしょうか? なんとなく聞いたことがあるが、 うまく説明できないという人も多いのではないでしょうか? ...

 

スポンサーリンク

 

シェルスクリプトを基本の基本から入門

本記事では、

シェルスクリプトを用いてディレクトリをコピー、ペーストする方法をわかりやすく解説しています。

 

では、そもそもシェルスクリプトとはなんでしょうか?

シェルスクリプトが使えるようになると、

エンジニアとしての幅が大きく広がります。

 

シェルスクリプトに関しては、以下の記事で詳しく解説しています。

 

シェルスクリプトとは?変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows
皆さんは、シェルスクリプトをご存知でしょうか? シェルスクリプトは、 使いこなせるようになれば非常に便利なツールです。 しかし、その利便性に反して、 あまり知名度は高くありませんね。 こ...

 

シェルスクリプトとは?関数、変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows
シェルスクリプトとは?関数、変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows シェルスクリプト入門 本記事は前回の続きとなっております。 シェルスクリプトに関しては、こちらの記事...

 

シェルスクリプトとは?引数 ファイル、関数、変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows
シェルスクリプトとは?引数 ファイル、関数、変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows シェルスクリプト入門 本記事は前回の続きとなっております。 シェルスクリプトに関して...

 

スポンサーリンク

 

bashでディレクトリ構造をコピーペーストするシェルスクリプト

では、実際にディレクトリをコピーペーストするシェルスクリプトを見ていきましょう。

まず、現在のディレクトリの下には、dir1というディレクトリがあるとします。

このdir1をコピーペーストして、

dir2, dir3, dir4, …, dir10

を作りたいとしましょう。

このためには、ディレクトリをコピーするコマンドとして、

cp

を用いればいいですね。

 

スポンサーリンク

 

cpのオプションとして、ディレクトリを操作するための

-r

を指定する必要があります。

引数は二つあって、

1つめはコピーしたい対象のディレクトリ、

2つめはペーストしたあとのディレクトリ名

を指定します。

 

スポンサーリンク

 

したがって、現在のディレクトリ下にあるdir1をコピーする場合は、

cp -r dir1

であり、さらにペーストしたあとの名前をdir2とする場合は、

cp -r dir1 dir2

とすればよいことがわかります。

 

さらに、dir2, dir3, …, dir10 を作りたい場合には、

cp -r dir1 dir2

cp -r dir1 dir3

cp -r dir1 dir10

 

というコマンドを入力すれば良いことになりますね。

 

スポンサーリンク

 

しかし、これを手で入力していては、あまりに時間がもったいないです。

そこで、シェルスクリプトを書くことでこれを自動化したいですね。

シェルスクリプトの基本中の基本、for文を使ってみましょう。

 

もしもシェルスクリプトに馴染みが無い場合は、

まず以下の記事を読んでみて下さい。

 

シェルスクリプトとは?変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows
皆さんは、シェルスクリプトをご存知でしょうか? シェルスクリプトは、 使いこなせるようになれば非常に便利なツールです。 しかし、その利便性に反して、 あまり知名度は高くありませんね。 こ...

 

スポンサーリンク

 

さて、

さきほどのコピーペースト操作をシェルスクリプトで実装する場合には、

どのようなプログラムを書けばよいでしょうか。

 

for 文を使ってある変数を走らせていき、

その変数名を使ってペースト先のディレクトリ名を記述すれば良いですね。

 

スポンサーリンク

 

例えば、変数名をi とすれば、

 

for i in <<iが走る範囲>>

do

<<ディレクトリをコピーする操作>>

done

 

というプログラムを書けば良いですね。

 

今回の場合ですと、生成したいディレクトリ名は

dir2, dir3, …, dir10

でした。

したがって、

ペーストするディレクトリ名はdir”$i”とすればよいですね。

i=2のときはdir2が、

i=3のときはdir3が、

i=10のときはdir10が、それぞれ生成されます。

 

スポンサーリンク

 

では、iの動く範囲を指定するにはどうすればよいでしょうか?

seq文を使えば良いですね。

 

seq文はシェルスクリプトの基本中の基本です。

 

もしもシェルスクリプトに馴染みが無い場合は、

まず以下の記事を読んでみて下さい。

 

シェルスクリプトとは?変数の宣言、代入、計算、引数などのコマンド実行方法をチェック!linux, mac, windows
皆さんは、シェルスクリプトをご存知でしょうか? シェルスクリプトは、 使いこなせるようになれば非常に便利なツールです。 しかし、その利便性に反して、 あまり知名度は高くありませんね。 こ...

 

seq文は、

1からある数字までの値を1ずつ増加させていくときに使います。

 

たとえば、

for i in seq 10

と書けば、iという変数が1から10まで動くわけですね。

 

これを先程のプログラムと組み合わせると、

 

for i in seq 10

do

<<ディレクトリをコピーする操作>>

done

 

となりますね。

 

スポンサーリンク

 

さて、

<<ディレクトリをコピーする操作>>

の部分ですが、

cp -r dir1 <<i番目のディレクトリ>>

の形式で書けばいいですね。

そkで、

数値が格納された変数であるi(=2)から、

文字列であるdir2をつくる必要があります。

 

そのためには、

dir”$i”

とすればよいです。

 

スポンサーリンク

 

しかし、いまiが走る範囲は1から始まって10で終わります。

i=1のとき、

dir”$i”

dir1

に対応します。

 

いま、

i=1,2,…,9

に対応して

dir2, dir3, …, dir10

を生成したいとすると、

i=1のときdir2を指定する必要がありますね。

 

スポンサーリンク

 

そこで、

cp -r dir1 dir”$(($i+1))”

とする必要があります。

 

こうすれば、

i=1のとき、

dir1をdir2としてコピーする

ことができます。

 

スポンサーリンク

 

以上より、

for i in seq 9

do

cp -r dir1 dir”$(($i+1))”

done

とすれば、

dir1をdir2, dir3, …, dir10にコピーできます。

 

注意:

seq 9の前後にバッククウォートが必要ですが、

お使いのブラウザによっては表示されていないかもしれません。

 

スポンサーリンク

 

いま読むべき記事

本ブログでは、pythonをはじめとしたプログラミングの情報などを、分かりやすく発信しています。

ぜひ、他の記事もご覧になってみてください。

 

【2021】bashとzsh、違いや互換性は?移行時の切り替え方は?戻す方法は?bashとは何?zshとは何?【わかりやすく】
【2021】bashとzsh、違いや互換性は?移行時の切り替え方は?戻す方法は?bashとは何?zshとは何?【わかりやすく】 bashとは何?zshとは何? bashやzshはシェルの種類です。 以前の記事でお伝えしたように、C...

 

dyld: Library not loaded:【これで解決!】zshが動かない時の対処法 zsh: abort Reason: image not found
dyld: Library not loaded:【これで解決!】zshが動かない時の対処法 zsh: abort Reason: image not found 最近、macのデフォルトシェルが、bashからzshに変更されました。 ...

 

スポンサーリンク

 

コメント