2

有人可以将这两个脚本从 MKS 翻译成 Powershell 吗?我想从我们的 ETL 工具中删除 MKS 并使用 Powershell 完成此操作,但没有排骨

1) 文件大小=ls -l $1 | awk '{print $5}'

如果 [ $FileSize -ge 100000000 ]; 然后拆分 -b 60000000 $1 $1 fi

2) 查找 $1 -type f -name *.txt -mtime +30 -exec rm {} \;

非常感谢画了

4

2 回答 2

2

避免在此处使用标准别名(例如,可以使用dirorls而不是Get-ChildItem):

1) 文件大小=ls -l $1 | awk '{打印 $5}'

$filesize = (Get-ChildItem $name).Length

如果 [ $FileSize -ge 100000000 ]; 然后拆分 -b 60000000 $1 $1 fi

if ($filesize -ge 100000000) { ... }

(无法回忆 的功能split

2) 查找 $1 -type f -name *.txt -mtime +30 -exec rm {} \;

$t = [datetime]::Now.AddSeconds(-30)
Get-ChildItem -path . -recurse -filter *.txt |
  Where-Object { $_.CreationTime -gt $t -and $_.PSIsContainer } |
  Remove-Item

(在不删除的情况下添加一个-whatifRemove-Item列出将被删除的内容。)

于 2011-03-14T18:53:13.377 回答
1

1)获取以 . 命名的文件的大小$1。如果大小超过 100 兆字节,split则将其分成每个 60 兆字节的部分。

MKS

FileSize=`ls -l $1 | awk '{print $5}'`

if [ $FileSize -ge 100000000 ]; then
split -b 60000000 $1 $1
fi

电源外壳

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
}

注意:仅实现了问题所需的拆分功能,并且仅在小文件大小上进行了测试。您可能想要研究StreamReaderStreamWriter执行更有效的缓冲 IO。


2)将目录下的30 天前修改过的所有扩展名的$1常规find文件删除。.txt

MKS

find $1 -type f -name *.txt -mtime +30 -exec rm {} \;

电源外壳

$modifiedTime = (Get-Date).AddDays( -30 )
Get-ChildItem $name -Filter *.txt -Recurse |
  Where-Object { $_.LastWriteTime -lt $modifiedTime } |
  Remove-Item -WhatIf

注意:取下-WhatIf开关,实际执行删除操作,而不是预览。

于 2011-09-24T15:50:09.520 回答