2016-05-31 7 views
1

私はSFTPアクセスのみを持つリモートサーバからいくつかのファイルを削除するために、cronジョブを作成したいと考えています。シェルへのアクセス権がありません。 リモートサーバーに接続してそれを行う最善の方法は何ですか? 私はsshpassをインストールして、このような何かをしたしている:リモートサーバでSFTPを使用して1日以上経過したファイルを削除する

sshpass -p pass sftp [email protected] 

しかし、どのように私は古いファイルを一覧表示し、それらを削除するためにコマンドを渡すことができますか?

+0

参照[SCP/SFTPを使用してリモートサーバー上のX日より古いファイルを削除](http://serverfault.com/q/184586/168875)。 –

+0

私はそれを見ましたが、その男はsshを使用しています。私はsshアクセス権を持っていません。 sftpのみ。 – user1919

+0

もう一つの答え(正しく)は、OpenSSHの 'sftp'クライアントには魔法の方法がないと言います。 –

答えて

2

OpenSSH sftpクライアントを使用して実装するのはむしろ困難です。

あなたが持っているでしょうに:

  • リストls -lコマンドを使用してディレクトリ。
  • (シェルまたは他のスクリプトで)結果を解析して名前と時刻を見つけます。
  • 必要なファイルをフィルタリングします。
  • 別のsftpスクリプトを生成して、見つけたファイル(rm)を削除してください。

方法より簡単でより信頼性の高いコマンドラインsftpに放棄するだろう。代わりに、お気に入りのスクリプト言語(Python、Perl、PHP)とそのネイティブSFTP実装を使用してください。 Perlで

2

# 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"; 
} 
関連する問題