【Bash / Ruby / Python3】新規ディレクトリ作成方法、ディレクトリ削除方法の比較
前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、「新規ディレクトリの作成方法」および「ディレクトリ削除方法」を比較します。比較では、実装例および実行例をそれぞれ示します。
Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。
Bash(Shell Script)からRubyやPythonに乗り換え!頻繁に使う処理を各言語で比較
各言語のVersion
- Bash:GNU bash, バージョン 5.0.3(1)-release
- Ruby:ruby 2.5.5p157 (2019-03-15 revision 67260)
- Python:Python 3.7.3
比較:「新規ディレクトリの作成方法」および「ディレクトリ削除方法」
自動化Scriptでは、設定ファイル保存用のディレクトリを作成したり、一時保管場所としていたディレクトリを削除する機会が多いです。
以下に、各言語の実装例および実行例を示します。
Bashの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash # -pオプション:親ディレクトリ含めて新規ディレクトリを作成する。 echo "新規ディレクトリ(new_dir/child_dir)を作成します。" mkdir -p new_dir/child_dir echo "ディレクトリ作成の確認をします。" tree echo "---" # -rオプション:ディレクトリとディレクトリ内部にあるファイルを削除する。 # -fオプション:確認無しで、強制的にファイルを削除する。 echo "ディレクトリ(new_dir)を削除します。" rm -rf new_dir echo "ディレクトリ削除の確認をします。" tree |
Rubyの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/usr/bin/env ruby require "fileutils" puts("新規ディレクトリ(new_dir/child_dir)を作成します。") FileUtils.mkdir_p('new_dir/child_dir') # system()は、外部コマンド(例:/bin以下のバイナリ)を実行する。 puts("ディレクトリ作成の確認をします。") system('tree') # Dir.rmdir() :空のディレクトリを削除する場合に使用する。 # FileUtils.rm_r() :再帰的にディレクトリの削除を行う。 # FileUtils.rm_rf():再帰的にディレクトリを"強制的"に削除する。 puts("---") puts("ディレクトリ(new_dir)を削除します。") FileUtils.rm_rf('new_dir') puts("ディレクトリ削除の確認をします。") system('tree') |
Pythonの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/bin/env python3 import os import subprocess import shutil print("新規ディレクトリ(new_dir/child_dir)を作成します。") os.makedirs('new_dir/child_dir') # subprocess.run()は、外部コマンド(例:/bin以下のバイナリ)を実行する。 print("ディレクトリ作成の確認をします。") subprocess.run('tree') # os.rmdir() :空のディレクトリを削除する場合に使用する。 # shutil.rmtree():再帰的にディレクトリの削除を行う(削除確認なし)。 print("---") print("ディレクトリ(new_dir)を削除します。") shutil.rmtree('new_dir') print("ディレクトリ削除の確認をします。") subprocess.run('tree') |
Bash、Ruby、Python3の実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
$ ./bash.sh 新規ディレクトリ(new_dir/child_dir)を作成します。 ディレクトリ作成の確認をします。 . ├── bash.sh ├── new_dir │ └── child_dir ├── python.py └── ruby.rb 2 directories, 3 files --- ディレクトリ(new_dir)を削除します。 ディレクトリ削除の確認をします。 . ├── bash.sh ├── python.py └── ruby.rb 0 directories, 3 files $ ./ruby.rb 新規ディレクトリ(new_dir/child_dir)を作成します。 ディレクトリ作成の確認をします。 . ├── bash.sh ├── new_dir │ └── child_dir ├── python.py └── ruby.rb 2 directories, 3 files --- ディレクトリ(new_dir)を削除します。 ディレクトリ削除の確認をします。 . ├── bash.sh ├── python.py └── ruby.rb 0 directories, 3 files $ ./python.py 新規ディレクトリ(new_dir/child_dir)を作成します。 ディレクトリ作成の確認をします。 . ├── bash.sh ├── new_dir │ └── child_dir ├── python.py └── ruby.rb 2 directories, 3 files --- ディレクトリ(new_dir)を削除します。 ディレクトリ削除の確認をします。 . ├── bash.sh ├── python.py └── ruby.rb 0 directories, 3 files |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] 新規ディレクトリ作成、ディレクトリ削除 […]