このシェルスクリプトは、指定したディレクトリ内のすべてのExcelファイル(.xlsx形式)をCSVファイルに変換し、別のディレクトリに保存します。変換にはPythonの xlsx2csv
ライブラリを使用します。
事前準備
1. Pythonのインストール
Pythonがシステムにインストールされていることを確認してください。
2. xlsx2csv
ライブラリのインストール
xlsx2csv
は、ExcelファイルをCSVに変換するためのPythonライブラリです。以下のコマンドでインストールできます。
pip install xlsx2csv
シェルスクリプト
以下の内容を .sh
ファイル(例: excel_to_csv.sh
)として保存します。
#!/bin/bash
# 変換対象のExcelファイルが存在するディレクトリ
# 例: デスクトップにあるExcelファイルを対象にする場合
input_dir="${HOME}/Desktop"
# 変換後のCSVファイルを保存するディレクトリ
# 例: デスクトップにcsv_outputディレクトリを作成する場合
output_dir="${HOME}/Desktop/csv_output"
# 出力ディレクトリが存在しない場合は作成する
mkdir -p "${output_dir}"
# ExcelファイルをCSVに変換する関数
# 引数: $1 - 入力Excelファイルのフルパス
convert_excel_to_csv() {
local input_file="$1"
# 出力ファイル名を生成 (元のファイル名から拡張子を除き、.csvを付与)
local output_file="${output_dir}/$(basename "${input_file%.*}").csv"
echo "Converting '${input_file}' to '${output_file}'..."
# python3 -m xlsx2csv を使って変換を実行
# -m オプションは、モジュールをスクリプトとして実行することを意味する
python3 -m xlsx2csv "${input_file}" "${output_file}"
if [ $? -eq 0 ]; then # 直前のコマンドの終了ステータスが0なら成功
echo "Conversion successful: '${output_file}'"
else
echo "Conversion failed for: '${input_file}'" >&2 # エラーメッセージは標準エラー出力へ
fi
}
# 指定ディレクトリ内のすべての.xlsxファイルをループ処理
# for ... in ...; do ... done 構文
for excel_file in "${input_dir}"/*.xlsx; do
# ファイルが存在するかチェック (ファイルがない場合にループが1回実行されるのを防ぐ)
if [ -f "${excel_file}" ]; then
convert_excel_to_csv "${excel_file}"
fi
done
echo "All Excel files processed."
スクリプトの実行方法
- 上記のスクリプトを
excel_to_csv.sh
などの名前で保存します。 - スクリプトに実行権限を付与します。
chmod +x excel_to_csv.sh
- スクリプトを実行します。
./excel_to_csv.sh
スクリプトの解説
#!/bin/bash
: このスクリプトをBashシェルで実行することを指定します。input_dir
,output_dir
: 変換元と変換先のディレクトリパスを定義します。${HOME}
はユーザーのホームディレクトリを表します。mkdir -p "${output_dir}"
: 変換後のCSVファイルを保存するディレクトリが存在しない場合に作成します。-p
オプションは、親ディレクトリも同時に作成し、既に存在してもエラーにしないようにします。convert_excel_to_csv()
関数:local
: 関数内で定義された変数がローカル変数であることを示します。basename "${input_file%.*}"
: ファイル名からパスと拡張子を除去します。python3 -m xlsx2csv "${input_file}" "${output_file}"
:xlsx2csv
モジュールを実行し、ExcelファイルをCSVに変換します。if [ $? -eq 0 ]
: 直前のコマンドの終了ステータス$?
が0(成功)かどうかをチェックします。
for excel_file in "${input_dir}"/*.xlsx; do ... done
:input_dir
内のすべての.xlsx
拡張子のファイルをループ処理します。if [ -f "${excel_file}" ]; then ... fi
: ループ内で見つかったものが実際にファイルであるかを確認します。これは、*.xlsx
にマッチするファイルがない場合にループが1回実行されてしまうのを防ぐためです。
このスクリプトは、Excelファイルを一括でCSVに変換する際に役立ちます。