С помощью PowerShell можно искать файлы только в подкаталогах с именем OLD с определенного возраста - PullRequest
2 голосов
/ 21 апреля 2010

Как я могу получить хороший список файлов в дереве каталогов, которое содержит несколько файлов OLD?

Я бы хотел видеть только файлы из каталогов с именем OLD, которые имеют определенный возраст.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Насколько я понимаю вопрос, Решение Рауля Суперкоптера не совсем отвечает на него. Вместо того, чтобы находить все файлы из каталогов с именем «СТАРЫЙ», приведенное выше решение находит все файлы, содержащие в своем имени «СТАРЫЙ».

Вместо этого я думаю, что вы запрашиваете что-то, что находит все файлы старше определенной даты, которые находятся в каталогах с именем OLD.

Итак, чтобы найти каталоги, нам нужно что-то вроде следующего:

dir -r | ? {$_.name -match "\bold\b" -and $_.PSIsContainer}

Но тогда вам нужно что-то, что может рекурсивно пройти через каждый каталог и найти файлы (и, возможно, любые каталоги с именем «OLD», которые содержатся в других каталогах с именем «OLD»).

Самый простой способ сделать это - написать функцию, а затем вызвать ее рекурсивно, но вот способ сделать это на одной строке, которая использует другую тактику (обратите внимание на символ продолжения строки, так что это будет соответствовать:

dir -r | ? {!$_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date 5/1/2006)} `
| ? {(% {$_.directoryname} | split-path -leaf) -eq "OLD"}

Итак, что здесь происходит?

Первый раздел - это просто рекурсивный список каталогов. В следующем разделе проверяется, просматриваете ли вы файл (!$_.PSIsContainer) и соответствует ли он вашим возрастным требованиям. Скобки вокруг раздела Get-Date позволяют получить результаты выполнения команды. Затем мы получаем имя каталога каждого файла и используем командлет split-path, чтобы получить только имя ближайшего каталога. Если это «СТАРЫЙ», то у нас есть файл, который соответствует вашим требованиям.

1 голос
/ 21 апреля 2010

Итак, первая часть - это список всех файлов, вторая часть - фильтрация ваших файлов и, наконец, форматирование выходных данных. Вы можете использовать Format-List или таблицу (но у меня нет установки PowerShell поблизости, чтобы проверить это:])

$yourDate = Get-Date 5/1/2006
ls -recurse . | ? { $_.fullname -match "OLD" -and $_.lastwritetime -lt $yourDate } | % { $_.fullname }

Get-Date создает объект Date-Time, когда вы задаете ему конкретную дату в качестве параметра. Просто используйте его и отфильтруйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...