← Back to Home

バッチ処理スクリプトの作成

Views: 903

You can try the commands on our interactive shell.

Linux チュートリアル: 批量処理スクリプトの作成

この記事では、Linux上で批量処理を行うためのスクリプトをどのように作成するかについて詳しく説明します。以下に基本的な手順と例示を提供します。

1. スクリプトの基本構造

まず、新しいテキストファイルを作成します。たとえば、batch_script.shという名前で保存します。テキストエディタ(例えば nano, vim, gedit)を使って新しいファイルを作成し、以下のような内容を記述します。

#!/bin/bash

# スクリプトの名前と説明
echo "Welcome to the Batch Processing Script"

この最初の行 #!/bin/bash はスクリプトが Bash プロセッサを使用することを指定します。

2. ファイル操作

批量処理では、ファイルのリストを操作することがよくあります。以下に、複数のファイルをリネームするためのスクリプト例を示します。

#!/bin/bash

# 指定したディレクトリ内のすべての .txt ファイルを処理する
for file in *.txt; do
    # 新しいファイル名を作成
    newfile="renamed_${file}"
    
    # リネーム操作
    mv "$file" "$newfile"
    
    echo "Renamed $file to $newfile"
done

このスクリプトは、現在のディレクトリ内のすべての .txt ファイルを処理し、それぞれに renamed_ 前缀が追加されます。

3. コマンドライン引数

スクリプトからコマンドライン引数を使用して、パラメータを渡すこともできます。以下は、引数を受け取ってファイルをコピーする例です。

#!/bin/bash

# コマンドライン引数のチェック
if [ $# -ne 2 ]; then
    echo "Usage: $0 <source_directory> <destination_directory>"
    exit 1
fi

src_dir=$1
dest_dir=$2

# 指定されたディレクトリ内にあるすべてのファイルをコピーする
for file in "$src_dir"/*; do
    cp "$file" "$dest_dir"
    echo "Copied $file to $dest_dir"
done

このスクリプトは、$1$2 に指定されたソースディレクトリと目的ディレクトリから、それぞれのファイルをコピーします。

4. 条件分岐

条件分岐を使用して、特定の条件下のみ処理を行うこともできます。以下は、ファイルが空かどうかを確認する例です。

#!/bin/bash

# 指定したディレクトリ内のすべての .txt ファイルを処理する
for file in *.txt; do
    # ファイルが空かどうかを確認する
    if [ -s "$file" ]; then
        echo "Processing $file"
        # ファイルの内容を出力する
        cat "$file"
    else
        echo "Skipping empty file: $file"
    fi
done

このスクリプトは、空でない .txt ファイルのみを処理し、その内容を表示します。

5. エラーハンドリング

エラーハンドリングも重要です。以下に、ファイルが存在しない場合のエラーメッセージを表示する例です。

#!/bin/bash

# 指定したディレクトリ内のすべての .txt ファイルを処理する
for file in *.txt; do
    if [ ! -f "$file" ]; then
        echo "Error: $file does not exist"
        exit 1
    fi
    
    # リネーム操作
    newfile="renamed_${file}"
    mv "$file" "$newfile"
    
    echo "Renamed $file to $newfile"
done

このスクリプトは、指定されたファイルが存在しない場合にエラーメッセージを表示し、スクリプトを終了します。

6. 処理速度の最適化

複数のファイルを処理する際には、並列処理を行うことで処理時間を短縮できます。以下は、xargs を使用して並列処理を行う例です。

#!/bin/bash

# 指定したディレクトリ内のすべての .txt ファイルを処理する
find *.txt -print0 | xargs -0 -P 4 bash -c '
    for file; do
        newfile="renamed_$1"
        mv "$1" "$newfile"
        echo "Renamed $1 to $newfile"
    done' _

このスクリプトは、xargs を使用して 4 個のプロセスで .txt ファイルを並列にリネームします。

7. グループ操作

複数のファイルに対して同じ操作を行う場合、グループ操作を使用できます。以下は、複数のディレクトリ内のすべての .txt ファイルをリネームする例です。

#!/bin/bash

# 指定したディレクトリ配下にあるすべての .txt ファイルを処理する
find /path/to/directories -name "*.txt" | while read file; do
    newfile="renamed_${file}"
    
    # リネーム操作
    mv "$file" "$newfile"
    
    echo "Renamed $file to $newfile"
done

このスクリプトは、指定されたディレクトリ配下にあるすべての .txt ファイルを再帰的に処理し、それぞれに renamed_ 前缀が追加されます。

8. 日志記録

ログ記録を使用して、スクリプトの実行状況を確認できます。以下は、ログファイルに操作の詳細を記録する例です。

#!/bin/bash

# ログファイルを開く
log_file="batch_script.log"

echo "Starting batch processing" >> "$log_file"

for file in *.txt; do
    newfile="renamed_${file}"
    
    # リネーム操作
    mv "$file" "$newfile"
    
    echo "$(date): Renamed $file to $newfile" >> "$log_file"
done

echo "Batch processing completed" >> "$log_file"

このスクリプトは、リネーム操作の詳細を batch_script.log ファイルに記録します。

9. スクリプトの実行権限設定

最後に、スクリプトに実行権限を設定します。以下は、chmod コマンドを使用して実行権限を追加する例です。

$ chmod +x batch_script.sh

これで、batch_script.sh ファイルを実行することができます。

10. スクリプトのテスト

スクリプトをテストして、正しく動作することを確認します。以下は、スクリプトを実行する例です。

$ ./batch_script.sh

スクリプトが正常に動作すると、リネームされたファイルとログ出力が表示されます。

まとめ

この記事では、Linuxで批量処理を行うためのスクリプトを作成する基本的な手順と例示を説明しました。実際の使用場面で応用してみてください。

Try it Now!