Это действительно приведет к удалению файлов «старше 1 дня» (а не 2 дней):
rm *<1D
См. маску файла с временными ограничениями.
Но этот синтаксис использует время модификации файла.
См. Также Удаление файлов старше X дней с FTP-сервера с помощью PowerShell или пакетного файла.
Если вам нужно выбрать файлы на основе отметки времени в их именах, это сложнее.
Легко удалить файлы с отметкой времени 2 дня назад:
rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv
Здесь используется %TIMESTAMP%
синтаксис с относительным временем. Синтаксис приведет к разрешению команды (по состоянию на 04.05.2017):
rm Sales_20170502????.csv
Но это не приведет к удалению файлов возрастом 3 дня и более. Это не проблема, если вы запускаете скрипт регулярно каждый день. Если вы хотите обеспечить отключение на 1 или несколько дней, вы можете удалить файлы с отметкой времени 2, 3, 4 ... дней, например:
rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv
rm Sales_%TIMESTAMP-3D#yyyymmdd%????.csv
rm Sales_%TIMESTAMP-4D#yyyymmdd%????.csv
...
Если вы действительно хотите удалить все файлы с отметкой времени 2 и более дней, вам нужно написать сценарий на более мощном языке.
Пример в PowerShell с использованием сборки WinSCP .NET:
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
HostName = "ftp.examle.com"
UserName = "username"
Password = "password"
}
# Connect
Write-Host "Connecting..."
$session = New-Object WinSCP.Session
$session.Open($sessionOptions)
Write-Host "Listing files..."
$remotePath = "/OUT"
$files = $session.ListDirectory($remotePath).Files
$prefix = "Sales_"
$twoDaysBack = (Get-Date).AddDays(-2)
$timestamp = $twoDaysBack.ToString("yyyyMMdd")
foreach ($file in $files)
{
if (($file.Name.Length -gt ($prefix.Length + $timestamp.Length)) -and
($file.Name.SubString(0, $prefix.Length) -eq $prefix) -and
($file.Name.SubString($prefix.Length, $timestamp.Length) -le $timestamp))
{
$path = [WinSCP.RemotePath]::EscapeFileMask($file.FullName)
$session.RemoveFiles($path).Check()
Write-Host "Deleted $($file.Name)"
}
}
Write-Host "Done"
person
Martin Prikryl
schedule
04.05.2017
*<1D
, если хотите выбрать файлы двухдневной давности? + Вы действительно можете выбрать файлы по времени их модификации? Потому что в вашем сообщении указано, что в именах файлов есть отметки времени. Это не то же самое, что время модификации файла, которое используется*<1D
. Время модификации файла совпадает с отметкой времени в именах файлов или нет? - person Martin Prikryl   schedule 02.05.2017