[powershell]巨大なテキストファイルの最後の方だけ見るのに時間がかかる
PS> dir \\リモートのPC\巨大ファイル ディレクトリ: \\xxxx\xxx\bin\logs Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2022/01/12 20:25 68290811 巨大ファイル.log
サーバのログの監視などでしょっちゅう状態を知りたいときなどに、
Linuxのtailの代わりにこれをやると
date Get-Content \\リモートのPC\巨大ファイル -tail 20 date
2022年10月13日 木曜日 20:23:29 ~略~ 2022年10月13日 木曜日 20:26:03
2分半くらいかかった。もっと素早くぱぱっと見たい。
FileStreamのSeekを使ってから、StreamReaderに引き渡す。
byte数指定なので、仮に10000byte
using namespace System.IO using namespace System.Text date $infile="\\リモートのPC\巨大ファイル" $fs = [FileStream]::new($infile, [FileMode]::Open, [FileAccess]::Read, [FileShare]::ReadWrite) #Seek()を使いたい + FileShare指定したいのでこれで開く $fs.Seek(-10000, [SeekOrigin]::End) $st = [StreamReader]::new($fs, [Encoding]::GetEncoding("shift_jis")) #ReadToEnd(), ReadLine()などを使いたいので $st.ReadToEnd() $st.close() $fs.close() date
2022年10月13日 木曜日 20:22:00 ~略~ 2022年10月13日 木曜日 20:22:14
14秒。
[FileShare]::ReadWrite でサーバ側の更新処理を邪魔しないようにしている(はず)