Powershell: выберите все элементы после N-го элемента

Вопрос или проблема

Итого в Powershell, используя конвейер, как мне выбрать элементы N и последующие?

В Powershell я хочу удалить самые старые файлы из каталога, кроме 10 самых недавних.

Я могу отсортировать файлы по LastWriteTime, а затем удалить некоторые из них с помощью Select-Object

PS> Get-ChildItem -Path C:\Temp -File `
    | Sort-Object -Property LastWriteTime `
    | Select-Object -First 6 `
    | Remove-Item -Verbose

Запуская предыдущий код, он будет удалять 6 файлов за раз, пока не останется больше файлов. Но я хочу, чтобы 10 самых последних файлов никогда не удалялись.

Как мне сделать так, чтобы удалить до 10 самых недавних файлов в каталоге?

Используйте -Skip оператор из Select-Object.

В примере кода измените Select-Object -First 6 на Select-Object -Skip 6.

PS> Get-ChildItem -Path C:\Temp -File `
    | Sort-Object -Property LastWriteTime `
    | Select-Object -Skip 6 `
    | Remove-Item -Verbose

Вам нужен параметр -skiplast.

PS> Get-ChildItem -Path C:\Temp -File `
    | Sort-Object -Property LastWriteTime `
    | Select-Object -Skiplast 10`
    | Remove-Item -Verbose

Ответ или решение

Чтобы решить задачу удаления старых файлов из директории в PowerShell, сохраняя при этом 10 самых свежих файлов, вы можете использовать мощные возможности командлета Select-Object с параметрами -Skip и -SkipLast. Давайте разберем этот процесс шаг за шагом.

Шаг 1: Получение списка файлов

В первую очередь, необходимо получить список всех файлов в указанной директории. Это можно сделать с помощью команды Get-ChildItem, добавив параметр -File, чтобы выбирать только файлы, а не папки. В вашем случае команда будет выглядеть так:

Get-ChildItem -Path C:\Temp -File

Шаг 2: Сортировка файлов

Следующий шаг — сортировка файлов по дате последнего изменения. Для этой цели используйте командлет Sort-Object, указав свойство LastWriteTime. Это позволит вам получить файлы в порядке их создания или изменения. Пример команды:

Get-ChildItem -Path C:\Temp -File | Sort-Object -Property LastWriteTime

Шаг 3: Пропуск самих недавних файлов

Чтобы оставить последние 10 файлов нетронутыми, вам нужно будет пропустить все файлы, кроме последних 10. Это можно сделать с помощью параметра -SkipLast в Select-Object. Таким образом, ваша команда будет выглядеть ради удаления файлов следующим образом:

Get-ChildItem -Path C:\Temp -File `
    | Sort-Object -Property LastWriteTime `
    | Select-Object -SkipLast 10 `
    | Remove-Item -Verbose

Объяснение параметров

  • Get-ChildItem: Получает файлы в указанной директории.
  • Sort-Object: Сортирует файлы по времени последнего изменения.
  • Select-Object -SkipLast 10: Пропускает последние 10 файлов, оставляя их в целостности.
  • Remove-Item -Verbose: Удаляет оставшиеся файлы и выводит информацию о процессе удаления.

Итог

Таким образом, приведённая выше команда позволит вам удалить старые файлы из директории, сохранив самые новые 10 файлов. Это решение эффективно и удобно, особенно для администраторов, которые часто работают с большими объемами данных. Убедитесь, что вы всегда тестируете такие скрипты на небольшой выборке данных, чтобы предотвратить случайную потерю важной информации.

Эта методология объёмно охватывает задачу удаления ненужных файлов в PowerShell и способствует эффективному управлению файловой системой в рамках администрирования.

Оцените материал
Добавить комментарий

Капча загружается...