1) Получить размер файла с именем $1
. Если размер превышает 100 мегабайт, split
разделите его на части по 60 мегабайт каждая.
MKS
FileSize=`ls -l $1 | awk '{print $5}'`
if [ $FileSize -ge 100000000 ]; then
split -b 60000000 $1 $1
fi
PowerShell
function split( [string]$path, [int]$byteCount ) {
# Find how many splits will be made.
$file = Get-ChildItem $path
[int]$splitCount = [Math]::Ceiling( $file.Length / $byteCount )
$numberFormat = '0' * "$splitCount".Length
$nameFormat = $file.BaseName + "{0:$numberFormat}" + $file.Extension
$pathFormat = Join-Path $file.DirectoryName $nameFormat
# Read the file in $byteCount chunks, sending each chunk to a numbered split file.
Get-Content $file.FullName -Encoding Byte -ReadCount $byteCount |
Foreach-Object { $i = 1 } {
$splitPath = $pathFormat -f $i
Set-Content $splitPath $_ -Encoding Byte
++$i
}
}
$FileSize = (Get-ChildItem $name).Length
if( $FileSize -gt 100MB ) {
split -b 60MB $name
}
Примечания: Была реализована только функция разделения, необходимая для данного вопроса, и протестирована только для файлов небольшого размера. Вы можете посмотреть StreamReader
и StreamWriter
, чтобы выполнить более эффективный буферизованный ввод-вывод.
2) В каталоге с именами $1
, find
все обычные файлы с расширением .txt
, которые были изменены более тридцати дней назад, и удалите их.
MKS
find $1 -type f -name *.txt -mtime +30 -exec rm {} \;
PowerShell
$modifiedTime = (Get-Date).AddDays( -30 )
Get-ChildItem $name -Filter *.txt -Recurse |
Where-Object { $_.LastWriteTime -lt $modifiedTime } |
Remove-Item -WhatIf
Примечания: Снимите переключатель -WhatIf
для фактического выполнения операции удаления, а не ее предварительного просмотра.