【Bash / Ruby / Python3】PATHからファイル名の抽出、ファイル名(拡張子なし)の取得、拡張子の取得方法の比較
前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、「PATHからファイル名を抽出する方法」、「ファイル名(拡張子なし)の取得する方法」、「ファイル名から拡張子だけを取得する方法」を比較します。比較では、実装例および実行例をそれぞれ示します。
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
比較:PATHからファイル名の抽出、ファイル名(拡張子なし)の取得、拡張子の取得
自動化Scriptでは、ファイル名から何らかの情報を抽出したり、期待する拡張子かどうかをチェックする処理を実施する機会が多いです。
以下に、各言語の実装例および実行例を示します。
Bashの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash # ファイルの絶対PATH FILE_PATH="/home/nao/text.txt" echo "絶対PATH :${FILE_PATH}" # PATHからファイル名(ベース名)だけを抽出する。 FILE_NAME=$(basename ${FILE_PATH}) echo "ベース名 :${FILE_NAME}" # ファイル名(拡張子なし)を取得する。 # ${変数%パターン}で、末尾から最短一致した部分を取り除く。 FILENAME_WITHOUT_EXT="${FILE_NAME%.*}" echo "ファイル名:${FILENAME_WITHOUT_EXT}" # 拡張子を取得する。 # ${変数##パターン}で、先頭から最長一致した部分を取り除く。 EXT="${FILE_NAME##*.}" echo "拡張子 :${EXT}" |
Rubyの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/env ruby # ファイルの絶対PATH file_path="/home/nao/text.txt" puts("絶対PATH :" + file_path) # PATHからファイル名(ベース名)だけを抽出する。 file_name = File.basename(file_path) puts("ベース名 :" + file_name) # ファイル名(拡張子なし)を取得する。 # ワイルドカードで削除すべき拡張子を指定している。 filename_without_ext = File.basename(file_name, ".*") puts("ファイル名:" + filename_without_ext) # 拡張子を取得する。 # 拡張子には、"."が含まれる。ドットが不要な場合は、別途削除する。 ext = File.extname(file_name) puts("拡張子 :" + ext) |
Python3の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/env python3 import os # ファイルの絶対PATH file_path="/home/nao/text.txt" print("絶対PATH :" + file_path) # PATHからファイル名(ベース名)だけを抽出する。 file_name = os.path.basename(file_path) print("ベース名 :" + file_name) # ファイル名(拡張子なし)を取得する。 # os.path.splitextで、ファイル名("text")と拡張子(".txt")に分離する。 filename_without_ext = os.path.splitext(file_name)[0] print("ファイル名:" + filename_without_ext) # 拡張子を取得する。 # 拡張子には、"."が含まれる。ドットが不要な場合は、別途削除する。 ext = os.path.splitext(file_name)[1] print("拡張子 :" + ext) |
Bash、Ruby、Python3の実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ ./bash.sh 絶対PATH :/home/nao/text.txt ベース名 :text.txt ファイル名:text 拡張子 :txt $ ./ruby.rb 絶対PATH :/home/nao/text.txt ベース名 :text.txt ファイル名:text 拡張子 :.txt $ ./python.py 絶対PATH :/home/nao/text.txt ベース名 :text.txt ファイル名:text 拡張子 :.txt |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] PATHからのファイル名抽出、ファイル名(拡張子なし)取得、拡張子の取得 […]