Cela fait supprimer des fichiers "de plus de 1 jour" (pas 2 jours):
rm *<1D
Voir file mask with time contraints.
Mais cette syntaxe utilise le temps de modification de fichier.
Voir également Delete files older than X days from FTP server with PowerShell or batch file.
Si vous devez sélectionner les fichiers en fonction de l'horodatage dans leurs noms, c'est plus compliqué.
Il est facile de supprimer des fichiers avec un horodatage 2 jours:
rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv
Il utilise %TIMESTAMP%
syntax with a relative time. La syntaxe fera la détermination de commande (au 04/05/2017):
rm Sales_20170502????.csv
Mais cela ne supprimera pas les fichiers 3 jours et plus vieux. Ce n'est pas un problème, si vous exécutez le script régulièrement tous les jours. Si vous souhaitez répondre à 1 ou quelques jours de pannes, vous pouvez supprimer des fichiers avec horodatage 2, 3, 4 ... jours comme:
rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv
rm Sales_%TIMESTAMP-3D#yyyymmdd%????.csv
rm Sales_%TIMESTAMP-4D#yyyymmdd%????.csv
...
Si vous voulez vraiment supprimer tous les fichiers avec timestamp 2 et plus vieux jours, vous devez écrire le script est un langage plus puissant.
Exemple dans 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"
Comment vous exécutez le fichier txt? Cela ressemble à un script WinSCP, mais vous n'avez pas mentionné WinSCP + Quelle est la question? Le script a l'air bien. Si cela ne fonctionne pas comme vous le souhaitez, vous devez nous dire ce qui ne va pas! + Pourquoi utilisez-vous '* <1D', si vous voulez sélectionner des fichiers de 2 jours? + Pouvez-vous vraiment sélectionner les fichiers par leur heure de modification? Parce que votre message indique que les fichiers ont des horodatages dans leurs noms.Ce n'est pas la même chose que l'heure de modification du fichier, utilisée par le '* <1D'. Est-ce que les heures de modification du fichier correspondent à l'horodatage dans les noms de fichiers ou non? –
Bonjour, je cours le fichier .txt en utilisant le fichier sales.bat. Le script txt fonctionne correctement sauf pour la section rm. Au début j'ai donné rm * .csv alors tous les fichiers ont été supprimés. Ma question est que j'ai besoin de supprimer les fichiers de 2 jours. pouvez-vous m'aider à supprimer ces fichiers en fonction du nom de mon fichier (sales_201705010315) – swetha
Il n'est donc pas possible de sélectionner les fichiers en fonction de la date de modification du fichier? –