Замените МКС на Powershell - PullRequest
       39

Замените МКС на Powershell

2 голосов
/ 14 марта 2011

Кто-нибудь может перевести эти два скрипта из MKS в Powershell?Я хотел бы удалить MKS из наших инструментов ETL и выполнить это с помощью Powershell, но у меня нет чопов

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

if [$ FileSize -ge 100000000];затем разбить -b 60000000 $ 1 $ 1 fi

2) найти $ 1 -типа f -name * .txt -mtime +30 -exec rm {} \;

большое спасибо, drew

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Избегайте использования здесь даже стандартных псевдонимов (например, можно использовать dir или ls вместо Get-ChildItem):

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

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

if [$ FileSize -ge 100000000];затем разбить -b 60000000 $ 1 $ 1 fi

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

(не может вызвать функцию split)

2) найти $ 1 -типа 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

(Добавьте -whatif к Remove-Item, чтобы получить список того, что будет удалено без их удаления.)

1 голос
/ 24 сентября 2011

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 для фактического выполнения операции удаления, а не ее предварительного просмотра.

...