これは確かに "1日より古い" ファイル(ない2日)を削除します:
rm *<1D
はfile mask with time contraintsを参照してください。
しかし、この構文ではファイルの変更時刻が使用されます。
Delete files older than X days from FTP server with PowerShell or batch fileも参照してください。
名前のタイムスタンプに基づいてファイルを選択する必要がある場合は、より複雑です。
それは2日古いタイムスタンプを持つファイルを削除するのは簡単です:
rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv
これは%TIMESTAMP%
syntax with a relative timeを使用しています。構文は(2017年5月4日現在)にコマンド決意を行います:
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 with use of WinSCP .NET assemblyで
例:
# 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"
どのように.txtファイルを実行していますか?それはWinSCPスクリプトのようですが、あなたはWinSCPについて言及していません+何が質問ですか?スクリプトはよく見えます。あなたが好きなように動作しない場合は、何が間違っているのかを教えてください! + 2日前のファイルを選択したいのですが、なぜ* * <1D'を使用しますか? +実際にファイルを変更時刻で選択できますか?あなたの投稿はファイルの名前にタイムスタンプがあることを示しているからです。これはファイル変更時と同じではなく、 '* <1D 'で使用されます。ファイルの変更時刻がファイル名のタイムスタンプと一致するかどうか –
こんにちは私はsales.batファイルを使用して.txtファイルを実行しています。 txtスクリプトはrmセクション以外は正常に動作しています。最初に私はrm * .csvを与え、すべてのファイルが削除されました。私の質問は、私は2日の古いファイルを削除する必要があります。ファイル名に基づいてファイルを削除する方法を教えてください。(sales_201705010315) – swetha
ファイルの変更に基づいてファイルを選択することはできません。 –