【发布时间】:2020-03-02 21:48:13
【问题描述】:
这是我在本地运行的 bash 脚本:
#!/usr/bin/bash
ls some_pattern_*.txt > deletion_list.txt
rm $(cat deletion_list.txt)
rm deletion_list.txt
exit 0
它的作用是查找与特定模式匹配的文件,并将该文件列表输出到名为deletion_list.txt 的文本文件中。然后脚本删除文本文档中指定的所有文件,最后删除deletion_list.txt 本身。这听起来可能很复杂,但我这样做是有原因的。
这是我尝试通过sftp 连接在远程主机上运行的稍作修改的版本:
#!/usr/bin/bash
sftp -i ~/.ssh/myprivatekey $username@$host <<-EOF
lcd /home/mydirectory
!ls some_pattern_*.txt > deletion_list.txt
rm $(cat deletion_list.txt)
!rm deletion_list.txt
EOF
exit 0
这应该做的是:
1) 使用sftp 连接到远程主机(远程主机上未启用ssh,以防任何答案建议改用ssh)
2) 更改本地目录
3)从我们所在的本地目录创建要删除的文件列表,并将deletion_list.txt本地存储在同一目录中
4) 根据deletion_list.txt 中的文件从远程主机删除文件 - 删除发生在远程,要删除的文件列表是本地的(deletion_list.txt 是从本地文件创建的,然后是相同的文件从远程主机中删除)。
我在第 4 步遇到问题。我不知道如何删除从本地文件输入的远程文件。
编辑:
正如有人指出的那样,cat 在 SFTP 会话期间也不起作用。
【问题讨论】:
-
rm some_pattern_*.txt? -
@KamilCuk 存在与我不想删除的模式匹配的远程文件。首先创建要删除的文件列表是我的要求的一部分,并且在问题中已指定。
-
你说“我有一个理由”,但请相信我,问这个问题的人的“理由”往往是错误的假设。
-
那我就不明白了。您是在连接到远程服务器之前还是之后创建要删除的文件列表?