2016-05-31 5 views
1

Ich möchte einen Cron-Job einrichten, um einige Dateien von einem Remote-Server zu löschen, in dem ich nur SFTP-Zugriff habe. Ich habe keinen Shell-Zugriff. Was ist der beste Weg, um eine Verbindung zum Remote-Server herzustellen und dies zu tun? Ich habe sshpass installiert und tat etwas wie folgt aus:Löschen von Dateien älter als ein Tag mit SFTP in Remote-Server

sshpass -p pass sftp [email protected] 

Aber wie kann ich passieren Befehle, um die alten Dateien aufzulisten und löschen?

+0

Siehe [Löschen von Dateien älter als X Tage auf Remote-Server mit SCP/SFTP] (http://serverfault.com/q/184586/168875). –

+0

Ich habe das gesehen, aber der Typ benutzt SSH. Ich habe keinen SSH-Zugang. Nur sftp. – user1919

+0

Die andere Antwort (richtig) besagt, dass es mit dem OpenSSH 'sftp' Client keinen magischen Weg gibt. –

Antwort

2

Es ist ziemlich schwierig, dies mit dem OpenSSH sftp Client zu implementieren.

Sie müssten:

  • Liste das Verzeichnis mit ls -l Befehl;
  • analysieren Sie die Ergebnisse (in der Shell oder einem anderen Skript), um Namen und Zeiten zu finden;
  • die gewünschten Dateien filtern;
  • generieren Sie eine weitere sftp Skript zu entfernen (rm) die Dateien, die Sie gefunden haben.

Ein Weg, einfacher und zuverlässiger wäre auf der Kommandozeile sftp aufgeben. Verwenden Sie stattdessen Ihre bevorzugte Skriptsprache (Python, Perl, PHP) und die native SFTP-Implementierung.

2

In Perl:

# untested: 
my ($host, $user, $pwd, $dir) = (...); 

use Net::SFTP::Foreign; 
use Fcntl ':mode'; 

my $deadline = time - 24 * 60 * 60; 

my $sftp = Net::SFTP::Foreign->new($host, user => $user, password => $pwd); 
$sftp->setcwd($dir); 
my $files = $sftp->ls('.', 
         wanted => sub { 
          my $attr = $_[1]->{a}; 
          return $attr->mtime < $deadline and 
           S_ISREG($attr->perm); 
         }) or die "Unable to retrieve file list"; 

for my $file (@$files) { 
    $sftp->rm($file->{filename}) 
     or warn "Unable to remove '$file->{filename}'\n"; 
} 
Verwandte Themen