Сценарий Powershell для удаления самых старых файлов (не относительно текущей даты)

Мой совет не состоит в том, чтобы обеспокоиться - S5520HCR на борту RAID разгружает всю обработку к драйверу ОС и основному ЦП, если Вы хотите использовать RAID в этой системе, делают это в программном обеспечении.

Если Вы действительно хотите сделать это затем существуют инструкции относительно того, что сделать для Windows 2008, Red Hat и SUSE на этой странице поддержки Intel.

5
задан 26 July 2013 в 00:44
5 ответов

Использование: yourScript.ps1 -Path path \ to \ run \ Against [-NumberToSave N]

param([String]$Path,[Int32]$NumberToSave=5)

$items = Get-ChildItem "$Path\*.ext" |
    Where-Object Name -match "\d\d\d\d\d\d\d\d-\d\d\d\d\.ext" |
    Sort-Object Name -Descending

if ($NumberToSave -lt $items.Count)
{
    $items[$NumberToSave..($items.Count-1)] | Remove-Item
}

Я не думаю, что это действительно лучше, чем у @ John, я только что сделал это, чтобы попробовать параметры, регулярное выражение, а не использовать цикл. Сопоставление с регулярным выражением действительно имеет возможное преимущество, поскольку исключает другие файлы с .ext, которые не соответствуют формату (например, 20130504-1200.txt.ext, 20.ext), но сомнительно, что это применимо.

Я был поражен, узнав, что если $ NumberToSave = $ items.Count, то требуется оператор if, иначе его бы там не было. Технически:

$items[$numberToSave..$items.Count] | Remove-Item 

работает нормально (PowerShell, похоже, не вызывает ошибки, если вы ссылаетесь за пределы массива, он просто обрабатывает и игнорирует его?), Но это казалось потенциально сбивающим с толку.

6
ответ дан 3 December 2019 в 01:14
$n = x

$items = Get-ChildItem path_to_folder\*.ext

$items | 
  Sort-Object Name -Descending | 
  Select-Object -Last ($items.count - $n) | 
  Foreach-Object { Remove-Item $_ }
4
ответ дан 3 December 2019 в 01:14

Друг предоставил этот сценарий:

# Defines how many files you want to keep?
$Keep = 5

# Specifies file mask
$FileMask = "*.ext"

# Defines base directory path
$Path = "F:\path\to\backups\"

# Creates a full path plus file mask value
$FullPath = $Path + $FileMask

# Creates an array of all files of a file type within a given folder, reverse sort.
$allFiles = @(Get-ChildItem $FullPath) | SORT Name -descending 

# Checks to see if there is even $Keep files of the given type in the directory.
If ($allFiles.count -gt $Keep) {

    # Creates a new array that specifies the files to delete, a bit ugly but concise.
    $DeleteFiles = $allFiles[$($allFiles.Count - ($allFiles.Count - $Keep))..$allFiles.Count]

    # ForEach loop that goes through the DeleteFile array
    ForEach ($DeleteFile in $DeleteFiles) {

        # Creates a full path and delete file value
        $dFile = $Path + $DeleteFile.Name

        # Deletes the specified file
        Remove-Item $dFile
    }
}
0
ответ дан 3 December 2019 в 01:14
# Get all the items in `C:\Archive`
Get-ChildItem -Path 'C:\Archive' |

    # Skip directories
    Where-Object { -not $_.PsIsContainer } |

    # Only get files that match YYYYMMDD-HHMM.ext format
    Where-Object { $_.Name -match '\d{8}-\d{4}.ext' } |

    # Sort them by name, from most recent to oldest
    Sort-Object -Descending -Property Name |

    # Keep the first five items
    Select-Object -Skip 5 |

    Remove-Item -WhatIf
0
ответ дан 3 December 2019 в 01:14

Я делал это в Bash раньше, и вы, возможно, сможете перевести это в PowerShell. Лично я администратор Linux и недостаточно разбираюсь в Windows / PowerShell, чтобы делать это сам.

#!/bin/bash

# Directory with backups in need of cleaning
bkps_dir="/opt/bkps/hosting.madyork.com"

# Make sure that there are at least 7 days worth of backups to avoid removing
#   the only backups left.
if [ "$(/bin/find "${bkps_dir}" -maxdepth 1 -type d | /usr/bin/wc -l)" -lt 8 ]; then
    echo "Less than 8 backups found!"
    echo "Will not delete anything!"
    echo "Exiting..."
    exit 1
fi

/bin/find "${bkps_dir}" -maxdepth 1 -type d -mtime +7 -print0 | /usr/bin/xargs -0 /bin/rm -rf

Извините, что я ничем не могу помочь.

Изменить: я также разместил это здесь на случай, если Linux admin нужна аналогичная информация.

-1
ответ дан 3 December 2019 в 01:14

Теги

Похожие вопросы