0
0

Bash スクリプトで複数ファイルをチェックし、コピーする方法

Posted at

この投稿では、Bash スクリプトを使って指定されたテキストファイル内のファイルパスを順にチェックし、それらのファイルが存在するかどうか、そしてサイズが 0 以上であるかを確認する方法について説明します。ファイルが存在し、サイズが 0 より大きい場合は指定されたフォルダにコピーされ、サイズが 0 の場合はそのファイル名が別の出力ファイルに記録されます。

#スクリプトの概要
このスクリプトは、以下の操作を行います:

1.入力ファイルの行ごとの読み取り: 入力ファイルは、ファイルパスが書かれたテキストファイルです。
2.ファイルの存在確認: 各ファイルパスについて、該当ファイルが存在するかどうかをチェックします。
3.ファイルサイズの確認: ファイルが存在する場合、そのサイズを確認します。
4.ファイルのコピーまたは記録: サイズが 0 より大きい場合、ファイルを指定されたフォルダにコピーします。サイズが 0 の場合、そのファイル名を出力ファイルに記録します。

スクリプトの内容
以下が、具体的なスクリプトの内容です:

#!/bin/bash

# 引数が正しく指定されているか確認する
if [ $# -ne 3 ]; then
    echo "使用方法: $0 input_file.txt output_folder/ empty_files_output.txt"
    exit 1
fi

# ユーザーからの入力を受け取る
input_file="$1"
output_folder="$2"
empty_files_output="$3"

# 出力フォルダが存在するか確認し、存在しない場合は作成する
if [ ! -d "$output_folder" ]; then
    mkdir -p "$output_folder"
fi

# 入力ファイルを1行ずつ読み込む
while IFS= read -r file_path; do
    # 行の前後の空白を削除
    file_path="$(echo "$file_path" | xargs)"

    # ファイルが存在するか確認する
    if [ -f "$file_path" ]; then
        # ファイルのサイズが0より大きいか確認する
        if [ -s "$file_path" ]; then
            # ファイルを出力フォルダにコピーする
            cp "$file_path" "$output_folder"
        else
            # ファイルのサイズが0の場合、ファイル名を出力ファイルに記録
            echo "$file_path" >> "$empty_files_output"
        fi
    else
        echo "ファイルが見つかりません: $file_path"
    fi
done < "$input_file"

#スクリプトの使い方

  1. スクリプトの保存
    スクリプトをファイルに保存します。例えば、check_and_copy.shという名前で保存します。

  2. 実行権限の付与
    スクリプトに実行権限を付与します。

chmod +x check_and_copy.sh
  1. スクリプトの実行
    以下のようにスクリプトを実行します:
./check_and_copy.sh input_file.txt /path/to/output/folder/ empty_files.txt

input_file.txt は、チェックしたいファイルパスが記載されたテキストファイルです。
/path/to/output/folder/ は、ファイルがコピーされるフォルダのパスです。
empty_files.txt は、サイズが 0 のファイルのパスを記録するファイルです。

#結果
ファイルが存在しない場合、エラーメッセージが表示されます。
ファイルが存在し、サイズが 0 より大きい場合は、指定されたフォルダにコピーされます。
ファイルが存在するがサイズが 0 の場合、そのファイル名が empty_files.txt に記録されます。
このスクリプトは、複数のファイルを効率的に管理するための基本的な方法を提供します。複数のファイルやプロジェクトを扱う際に役立つことでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0