আমি @ হাজামির সমাধান নিয়েছি এবং এটিকে কিছুটা সুবিধাজনক স্ক্রিপ্টের মোড়কে জড়িয়েছি।
আমি ফাইলটি শেষ হওয়ার আগে অফসেট থেকে শুরু করার জন্য একটি বিকল্প যুক্ত করেছি, যাতে আপনি ফাইলের শেষ থেকে নির্দিষ্ট পরিমাণে পড়ার লেজের মতো কার্যকারিতাটি ব্যবহার করতে পারেন। নোট করুন অফসেটটি বাইটে রয়েছে, লাইন নয়।
আরও কন্টেন্টের জন্য অপেক্ষা করা চালিয়ে যাওয়ার বিকল্প রয়েছে।
উদাহরণ (আপনি এটি টেলফিল.পিএস 1 হিসাবে সংরক্ষণ করেছেন ধরে নিচ্ছেন):
.\TailFile.ps1 -File .\path\to\myfile.log -InitialOffset 1000000
.\TailFile.ps1 -File .\path\to\myfile.log -InitialOffset 1000000 -Follow:$true
.\TailFile.ps1 -File .\path\to\myfile.log -Follow:$true
এবং এখানে স্ক্রিপ্ট নিজেই ...
param (
[Parameter(Mandatory=$true,HelpMessage="Enter the path to a file to tail")][string]$File = "",
[Parameter(Mandatory=$true,HelpMessage="Enter the number of bytes from the end of the file")][int]$InitialOffset = 10248,
[Parameter(Mandatory=$false,HelpMessage="Continuing monitoring the file for new additions?")][boolean]$Follow = $false
)
$ci = get-childitem $File
$fullName = $ci.FullName
$reader = new-object System.IO.StreamReader(New-Object IO.FileStream($fullName, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [IO.FileShare]::ReadWrite))
#start at the end of the file
$lastMaxOffset = $reader.BaseStream.Length - $InitialOffset
while ($true)
{
#if the file size has not changed, idle
if ($reader.BaseStream.Length -ge $lastMaxOffset) {
#seek to the last max offset
$reader.BaseStream.Seek($lastMaxOffset, [System.IO.SeekOrigin]::Begin) | out-null
#read out of the file until the EOF
$line = ""
while (($line = $reader.ReadLine()) -ne $null) {
write-output $line
}
#update the last max offset
$lastMaxOffset = $reader.BaseStream.Position
}
if($Follow){
Start-Sleep -m 100
} else {
break;
}
}