【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
比較:ファイルの存在を確認する方法
ファイルの存在確認は、ファイルが存在しなければ後続処理が失敗してしまう場合や、ファイルを作成すべきかどうかの判断をする際に、実施する機会が多いです。
以下に、各言語の実装例および実行例を示します。
Bashの場合
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 |
#!/bin/bash # bash.sh、python.py、ruby.rbが存在するディレクトリで、 # 以下のコードを実行する。 # ファイルが存在するケース if [ -f "ruby.rb" ]; then # こちらが実行される。 echo "ruby.rbが存在する。" else echo "ruby.rbが存在しない" fi # 否定演算子を使ったケース(ファイルが存在するケース) if [ ! -f "python.py" ]; then echo "python.pyが存在しない。" else # こちらが実行される。 echo "python.pyが存在する。" fi # ファイルが存在しないケース if [ -f "not_exist.txt" ]; then echo "not_exist.txtが存在する。" else # こちらが実行される。 echo "not_exist.txtが存在しない。" fi |
Rubyの場合
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 |
#!/usr/bin/env ruby # bash.sh、python.py、ruby.rbが存在するディレクトリで、 # 以下のコードを実行する。 # ファイルが存在するケース if File.exist?("bash.sh") # こちらが実行される。 printf("%s: bash.shが存在する。\n", File.exist?("bash.sh")) else printf("%s: bash.shが存在しない。\n", File.exist?("bash.sh")) end # 否定演算子を使ったケース(ファイルが存在するケース) if !File.exist?("python.py") printf("%s: python.pyが存在しない。\n", !File.exist?("python.py")) else # こちらが実行される。 printf("%s: python.pyが存在する。\n", !File.exist?("python.py")) end # ファイルが存在しないケース if File.exist?("not_exist.txt") printf("%s: not_exist.txtが存在する。\n", File.exist?("not_exist.txt")) else # こちらが実行される。 printf("%s: not_exist.txtが存在しない。\n", File.exist?("not_exist.txt")) end |
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 |
#!/usr/bin/env python3 import os # bash.sh、python.py、ruby.rbが存在するディレクトリで、 # 以下のコードを実行する。 # ファイルが存在するケース if(os.path.isfile("python.py")): # こちらが実行される。 print("%s: python.pyが存在する。" % os.path.isfile("python.py")) else: print("%s: python.pyが存在しない。" % os.path.isfile("python.py")) # 否定演算子を使ったケース(ファイルが存在するケース) if(not os.path.isfile("bash.sh")): print("%s: bash.shが存在する。" % (not os.path.isfile("bash.sh"))) else: # こちらが実行される。 print("%s: bash.shが存在しない。" % (not os.path.isfile("bash.sh"))) # ファイルが存在しないケース if(os.path.isfile("not_exist.txt")): print("%s: not_exist.txtが存在する。" % os.path.isfile("not_exist.txt")) else: # こちらが実行される。 print("%s: not_exist.txtが存在しない。" % os.path.isfile("not_exist.txt")) |
Bash、Ruby、Python3の実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ ls (注釈) 実行ディレクトリにあるファイルの確認 bash.sh python.py ruby.rb $ ./bash.sh ruby.rbが存在する。 python.pyが存在する。 not_exist.txtが存在しない。 $ ./ruby.rb true: bash.shが存在する。 false: python.pyが存在する。 false: not_exist.txtが存在しない。 $ ./python.py True: python.pyが存在する。 False: bash.shが存在しない。 False: not_exist.txtが存在しない。 |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] ファイルの存在確認 […]