使用远程服务器中的SFTP删除早于一天的文件

使用远程服务器中的SFTP删除早于一天的文件,sftp,Sftp,我想建立一个cron作业,以便从只有SFTP访问权限的远程服务器上删除一些文件。我没有任何shell访问权限。 连接到远程服务器并执行此操作的最佳方式是什么? 我安装了sshpass,并做了如下操作: sshpass -p pass sftp user@host 但是如何传递命令以列出旧文件并删除它们呢?使用OpenSSHsftp客户端实现这一点相当困难 你必须: 使用ls-l命令列出目录 解析结果(在shell或其他脚本中)以查找名称和时间 过滤你想要的文件 生成另一个sftp脚本以删除(

我想建立一个cron作业,以便从只有SFTP访问权限的远程服务器上删除一些文件。我没有任何shell访问权限。 连接到远程服务器并执行此操作的最佳方式是什么? 我安装了
sshpass
,并做了如下操作:

sshpass -p pass sftp user@host

但是如何传递命令以列出旧文件并删除它们呢?

使用OpenSSH
sftp
客户端实现这一点相当困难

你必须:

  • 使用
    ls-l
    命令列出目录
  • 解析结果(在shell或其他脚本中)以查找名称和时间
  • 过滤你想要的文件
  • 生成另一个
    sftp
    脚本以删除(
    rm
    )找到的文件


一种更简单、更可靠的方法是放弃使用命令行
sftp
。相反,请使用您最喜欢的脚本语言(Python、Perl、PHP)及其本机SFTP实现。

使用OpenSSH
SFTP
客户端实现这一点相当困难

你必须:

  • 使用
    ls-l
    命令列出目录
  • 解析结果(在shell或其他脚本中)以查找名称和时间
  • 过滤你想要的文件
  • 生成另一个
    sftp
    脚本以删除(
    rm
    )找到的文件

一种更简单、更可靠的方法是放弃使用命令行
sftp
。相反,请使用您最喜欢的脚本语言(Python、Perl、PHP)及其本机SFTP实现。

在Perl中:

#未经测试:
我的($host,$user,$pwd,$dir)=(…);
使用Net::SFTP::Foreign;
使用Fcntl':模式';
我的$deadline=时间-24*60*60;
我的$sftp=Net::sftp::Foreign->new($host,user=>$user,password=>$pwd);
$sftp->setcwd($dir);
my$files=$sftp->ls('.''.',
#回调函数“想要”被传递一个对哈希的引用,每个文件有3个键:
#键:filename、longname(如ls-l)和“a”,一个包含atime、mtime、权限和文件大小的Net::SFTP::Foreign::Attributes对象。
#如果返回true,则将文件传递给返回的数组。
#类似的功能“不需要”也存在,但效果相反。
通缉=>sub{
my$attr=$\u1]>{a};
返回$attr->mtime<$deadline和
S_ISREG($attr->perm);
})或“无法检索文件列表”;
对于我的$文件(@$文件){
$sftp->remove($file->{filename})
或警告“无法删除“$file->{filename}”\n”;
}
在Perl中:

#未经测试:
我的($host,$user,$pwd,$dir)=(…);
使用Net::SFTP::Foreign;
使用Fcntl':模式';
我的$deadline=时间-24*60*60;
我的$sftp=Net::sftp::Foreign->new($host,user=>$user,password=>$pwd);
$sftp->setcwd($dir);
my$files=$sftp->ls('.''.',
#回调函数“想要”被传递一个对哈希的引用,每个文件有3个键:
#键:filename、longname(如ls-l)和“a”,一个包含atime、mtime、权限和文件大小的Net::SFTP::Foreign::Attributes对象。
#如果返回true,则将文件传递给返回的数组。
#类似的功能“不需要”也存在,但效果相反。
通缉=>sub{
my$attr=$\u1]>{a};
返回$attr->mtime<$deadline和
S_ISREG($attr->perm);
})或“无法检索文件列表”;
对于我的$文件(@$文件){
$sftp->remove($file->{filename})
或警告“无法删除“$file->{filename}”\n”;
}

See。我已经看到了,但这家伙使用ssh。我没有ssh访问权限。只有sftp。另一个答案(正确地)说,OpenSSH
sftp
client没有神奇的方法。是的,但在远程服务器上运行脚本意味着您有这样做的权限。我无法在那里执行python/bash脚本。请使用
ls-l
获取时间。我不太了解尼克斯客户。你最好用Python/Perl/PHP.See编写脚本。我已经看到了,但是这个家伙使用ssh。我没有ssh访问权限。只有sftp。另一个答案(正确地)说,OpenSSH
sftp
client没有神奇的方法。是的,但在远程服务器上运行脚本意味着您有这样做的权限。我无法在那里执行python/bash脚本。请使用
ls-l
获取时间。我不太了解尼克斯客户。最好用Python/Perl/PHP编写脚本。