前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、「ファイルのコピー方法」および「ファイル移動方法」を比較します。比較では、実装例および実行例をそれぞれ示します。
Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。
各言語の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の場合
#!/bin/bash
echo "ファイルのコピー:bash.shをbash_copy.shとしてコピーします。"
cp bash.sh bash_copy.sh
# ファイルの移動
# backupディレクトリは、予め存在する状態で実行する。
# 移動時に、第二引数に別ファイル名を指定可能。
echo "ファイルの移動:bash_copy.shをbackupディレクトリに移動します。"
mv bash_copy.sh backup/.
Rubyの場合
#!/usr/bin/env ruby
require "fileutils"
# ファイルのコピー
puts("ファイルのコピー:ruby.rbをruby_copy.rbとしてコピーします。")
FileUtils.cp("ruby.rb", "ruby_copy.rb")
# ファイルの移動
# backupディレクトリは、予め存在する状態で実行する。
# 移動時に、第二引数に別ファイル名を指定可能。
puts("ファイルの移動:ruby_copy.rbをbackupディレクトリに移動します。")
FileUtils.mv("ruby_copy.rb", "backup/.")
Pythonの場合
#!/usr/bin/env python3
import shutil
# ファイルのコピー
print("ファイルのコピー:python.pyをpython_copy.pyとしてコピーします。")
shutil.copy('python.py', 'python_copy.py')
# ファイルの移動
# backupディレクトリは、予め存在する状態で実行する。
# 移動時に、第二引数に別ファイル名を指定可能。
print("ファイルの移動:python_copy.pyをbackupディレクトリに移動します。")
shutil.move('python_copy.py', 'backup/.')
Bash、Ruby、Python3の実行例
$ ls (注釈):スクリプト実行前の確認
backup bash.sh python.py ruby.rb
$ ./bash.sh
ファイルのコピー:bash.shをbash_copy.shとしてコピーします。
ファイルの移動:bash_copy.shをbackupディレクトリに移動します。
$ ./ruby.rb
ファイルのコピー:ruby.rbをruby_copy.rbとしてコピーします。
ファイルの移動:ruby_copy.rbをbackupディレクトリに移動します。
$ ./python.py
ファイルのコピー:python.pyをpython_copy.pyとしてコピーします。
ファイルの移動:python_copy.pyをbackupディレクトリに移動します。
$ tree (注釈):ファイルコピーとファイル移動の確認
.
├── backup
│ ├── bash_copy.sh
│ ├── python_copy.py
│ └── ruby_copy.rb
├── bash.sh
├── python.py
└── ruby.rb
1 directory, 6 files
