首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据本地文件匹配删除远程文件的Bash脚本

根据本地文件匹配删除远程文件的Bash脚本
EN

Stack Overflow用户
提问于 2020-03-02 21:48:13
回答 2查看 933关注 0票数 0

下面是我在本地运行的bash脚本:

代码语言:javascript
复制
#!/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连接在远程主机上运行的稍微修改的版本:

代码语言:javascript
复制
#!/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会话期间也不工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-02 22:46:24

ssh不可用时,您将无法执行$(cat ...)

但是您可以在本地创建rm命令并将它们发送到服务器:

代码语言:javascript
复制
find -printf 'rm %f\n' -name 'pattern' | \
   sftp -b - server:`pwd`

注意:您可能需要一个额外的层来确保引用正确(例如,当文件名包含空格或换行符时会发生什么情况?)

票数 3
EN

Stack Overflow用户

发布于 2020-03-03 10:04:53

代码语言:javascript
复制
ssh  $username@$host  "ls -1 | grep -v some_pattern_*.txt |  xargs rm"

https://linux.die.net/man/1/xargs

xargs ->转换命令的管道输入输入参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60497141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档