В macOS High Sierra (10.13.1) и Java версии 9 вам нужно использовать несколько другой путь JVM (обратите внимание на недостающую папку jre
в пути по сравнению с инструкциями для более ранних версий Java):
sudo ln -f -s $(/usr/libexec/java_home)/lib/server/libjvm.dylib /usr/local/lib
Вы также должны уведомить R о JVM:
ln -s /usr/local/lib/libjvm.dylib /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force -Recurse
Это удалит старые папки и содержимое.
Другой способ - вычесть 15 дней с текущей даты и сравнить CreationTime
с этим значением:
$root = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)
Get-ChildItem $root -Recurse | ? {
-not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item
просто (PowerShell V5)
Get-ChildItem "C:\temp" -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-15) | Remove-Item -Force
Другая альтернатива (15. автоматически набирается на [timespan]):
ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose
Скрипт Esperento57 не работает в старых версиях PowerShell. В этом примере:
Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt (Get-Date).AddDays(-15) ) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue
Эти ответы будут удалять только файлы (что, по общему признанию, это то, что находится в заголовке этого сообщения), но вот какой-то код, который сначала удалит все файлы старше 15 дней, а затем рекурсивно удалит все пустые каталоги, которые могут остались. Мой код также использует параметр -Force
для удаления скрытых и файлов только для чтения. Кроме того, я решил не использовать псевдонимы, поскольку OP является новым для PowerShell и может не понимать, что gci
, ?
, %
и т. Д.
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
И, конечно, если вы хотите увидеть, какие файлы / папки будут удалены до их фактического удаления, вы можете просто добавить переключатель -WhatIf
в вызов командлета Remove-Item
в конце обеих строк.
Код, показанный здесь совместим с PowerShell v2.0, но я также показываю этот код и более быстрый код PowerShell v3.0 как удобные функции повторного использования в моем блоге .
#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)
#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}
foreach ($File in $Files)
{
if ($File -ne $Null)
{
write-host "Deleting File $File" backgroundcolor "DarkRed"
Remove-item $File.Fullname | out-null
}
else
write-host "No more files to delete" -forgroundcolor "Green"
}
}
$Files
пуст, он не будет вводить оператор foreach i>. Вы должны поместить foreach в оператор if i>.
– Dieter
26 May 2015 в 08:16
Попробуйте следующее:
dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
-recurse
слишком много, нет? Список каталогов рекурсивно, удаление элемента не должно быть связано с включенными дочерними элементами, правильно?
– Joost
31 July 2013 в 01:00
В основном, вы перебираете файлы по заданному пути, вычитаете CreationTime
каждого файла, найденного с текущего времени, и сравниваете его с Days
свойством результата. Переключатель -WhatIf
скажет вам, что произойдет, не удалив фактически файлы (какие файлы будут удалены), удалите переключатель, чтобы фактически удалить файлы:
$old = 15
$now = Get-Date
Get-ChildItem $path -Recurse |
Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item -WhatIf