Robocopyのログのサマリー部分が見づらいので、整形してみました。
スクリプト名は、logreport.sh です(適当に直して下さい)。
#!/bin/sh
<< COMMENTOUT
2019/09/04作成
robocopyログファイル(Windows2016版)のサマリー部分の整形スクリプト
フォルダ"log"内のrobocopy*.logをUTF-8に変換し、"report"フォルダにサマリー部分を出力します
要 nkf
処理前のlogの最終部分
------------------------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 18571 0 18571 0 0 0
ファイル: 157425 152728 4697 0 0 0
バイト: 299399096023 292980525070 6418570953 0 0 0
時刻: 0:15:20 0:10:48 0:00:00 0:04:32
速度: 451855700 バイト/秒
速度: 25855.390 MB/分
終了: 2019年xx月xx日 xx:xx:xx
処理後のlog
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 18571 0 18571 0 0 0
Files : 157425 152728 4697 0 0 0
Bytes : 299399096023 292980525070 6418570953 0 0 0
Times : 0:15:20 0:10:48 0:00:00 0:04:32
速度: 451855700 バイト/秒
速度: 25855.390 MB/分
終了: 2019年xx月xx日 xx:xx6:xx
使い方
カレントディレクトリに"log"というフォルダを作り、robocopyのログファイルを格納します
カレントディレクトリに"report"というフォルダを作っておきます
WSLを起動し、カレントディレクトリに移動します
./logreport.sh をキックします
※もともとは Powershell で作りましたが、
処理ファイル数が多いと不安定になるようなので、
シェルスクリプトで作り直しました
※事前に、WSLにnkfをインストールしておいて下さい
COMMENTOUT
tmpfile=$(mktemp)
tmpfile2=$(mktemp)
tmpfile3=$(mktemp)
# ログファイルの文字コードを UTF-8 にする
cd log
echo ログファイルをUTF-8化しています...
find . -name 'robocopy*.log' -type f -print0 | xargs -0 nkf -u -Lu --overwrite -w
# ログファイルの最後の15行目を取り出し、
# ----------で始まる行以降を取り出し(ファイルが短くて-----が2行入ってしまった場合は2番目以降)
# サマリー行の全角文字を半角文字に変換する
echo ログファイルを整形出力します
for fname in `find ./robocopy*.log`
do
echo $fname
# 各ログファイルの末尾15行を取り出す
tail -15 $fname > $tmpfile
if [ `grep -c '^----------' $tmpfile` -eq 2 ] ; then
# ^---------- が2行ある場合は、最初の行を潰す
sed '0,/^----------/ s/^----------/xxx/' $tmpfile > $tmpfile3
# ^---------- 以降を出力
fname1=${fname#.\/robocopy_}
echo ${fname1%.log} > $tmpfile2
sed -n '/^----------/,$p' $tmpfile3 >> $tmpfile2
rm $tmpfile3
else
# ^---------- 以降を出力
fname1=${fname#.\/robocopy_}
echo ${fname1%.log} > $tmpfile2
sed -n '/^----------/,$p' $tmpfile >> $tmpfile2
fi
# サマリーの全角を半角に変換
sed -e 's/^ ディレクトリ:/ Dirs : /g' \
-e 's/^ ファイル:/ Files : /g' \
-e 's/^ バイト:/ Bytes : /g' \
-e 's/^ 時刻:/ Times : /g' \
-e 's/ 合計/Total/g' \
-e 's/ コピー済み/Copied/g' \
-e 's/ スキップ/Skipped/g' \
-e 's/ 不一致/Mismatch/g' \
-e 's/ 失敗/FAILED/g' \
$tmpfile2 > ../report/$fname
done
rm $tmpfile
rm $tmpfile2
以上です。