指定されたファイル情報とサーバー上の実際のファイル情報を比較して、ファイルが一致するか、ファイル情報より古いか、新しいかを表示するシェルスクリプトを作成することができます。
file_info.txt
file1.txt,/path/to/file1.txt,1024,2024-12-01 12:00:00
file2.txt,/path/to/file2.txt,2048,2024-12-02 14:00:00
compare_files.sh
#!/bin/bash
# ファイル情報が保存されたファイル(例: file_info.txt)
file_info="file_info.txt"
# ファイル情報を読み込んで処理
while IFS=',' read -r stored_name stored_path stored_size stored_date; do
# 実際のファイル情報を取得
if [ -f "$stored_path" ]; then
# 実際のファイルのサイズと更新日を取得
actual_size=$(stat -c %s "$stored_path")
actual_date=$(stat -c %y "$stored_path")
# サイズを比較
if [ "$stored_size" -eq "$actual_size" ]; then
size_status="サイズは一致"
else
size_status="サイズが異なる"
fi
# 更新日を比較(フォーマットを一致させる)
if [[ "$stored_date" == "$actual_date" ]]; then
date_status="更新日は一致"
else
# ファイル情報より古いか新しいかを判定
stored_date_timestamp=$(date -d "$stored_date" +%s)
actual_date_timestamp=$(date -d "$actual_date" +%s)
if [ "$actual_date_timestamp" -gt "$stored_date_timestamp" ]; then
date_status="ファイルは新しい"
elif [ "$actual_date_timestamp" -lt "$stored_date_timestamp" ]; then
date_status="ファイルは古い"
else
date_status="更新日は一致"
fi
fi
# 結果を表示
echo "$stored_name ($stored_path): $size_status, $date_status"
else
echo "$stored_name ($stored_path): ファイルが存在しません"
fi
done < "$file_info"
説明
file_info.txt からファイル情報(ファイル名、パス、サイズ、更新日)を読み込みます。
各ファイルの実際の情報(サイズと更新日)を stat コマンドで取得し、指定されたファイル情報と比較します。
比較の結果、ファイルが一致するか、サイズや更新日が異なるかを判定し、その情報を表示します。
ファイルが存在しない場合も表示します。
実行方法
上記のスクリプトをファイル(例: compare_files.sh)として保存します。
実行権限を付与します:
chmod +x compare_files.sh
スクリプトを実行します:
./compare_files.sh
例: 出力
例えば、file_info.txt に次のような情報があるとします:
スクリプトを実行した結果、次のように出力されます:
file1.txt (/path/to/file1.txt): サイズは一致, 更新日は一致
file2.txt (/path/to/file2.txt): サイズが異なる, ファイルは新しい
このスクリプトにより、サーバー上のファイル情報と指定された情報が一致するか、更新日やサイズに違いがあるかを確認できます。