首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >登录到远程Linux框并执行命令

登录到远程Linux框并执行命令
EN

Unix & Linux用户
提问于 2019-09-19 15:36:53
回答 3查看 446关注 0票数 0

若要删除运行在远程Linux框上的dir中的所有最新文件(除2个文件外),我使用:

代码语言:javascript
复制
cd /data
ls -1tr | head -n -2 | xargs -d '\n' rm -f --

在登录到远程Linux框后,我手动执行这些命令,但我试图将这些命令的登录和运行合并到一个命令中。

我使用scp执行类似的操作,在dir /local/data上登录文件并将文件scp到本地机器:

代码语言:javascript
复制
scp -i LightsailDefaultKey-eu-west-2.pem -r ubuntu@xxx.xxx.xxx.xxx:/data/ /local/data

是否有一种方法可以执行与上面的登录和命令类似的操作:

代码语言:javascript
复制
cd /data
ls -1tr | head -n -2 | xargs -d '\n' rm -f --

在本地机器上的远程计算机上执行单个命令吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2019-09-29 05:29:48

与其他招贴画一样,您不应该使用ls进行这种解析,但是既然您所拥有的内容适合您正在做的工作,那么您就不能使用ls命令中的-d开关来获得完整的目录路径吗?

除非您正在做更多的工作,否则没有理由更改您的工作目录。注意,您需要添加该通配符。

代码语言:javascript
复制
ssh user@host "ls -d1tr /data/* | head -n -2 | xargs -d '\n' rm -f --"
票数 2
EN

Unix & Linux用户

发布于 2019-09-20 02:59:20

  1. 使用find而不是ls。见为什么not解析ls(取而代之的是做什么)?
  2. 将要在远程系统上运行的命令包装为引号(但请注意嵌套引号可能存在困难)或此处文档中。

例如,使用findsortheadcut的GNU版本:

代码语言:javascript
复制
ssh -i LightsailDefaultKey-eu-west-2.pem ubuntu@xxx.xxx.xxx.xxx \
  'find /data/ -maxdepth 1 -type f -printf "%Ts\t%p\0" | sort -z -nr | 
     head -z -n 2 | cut -z -f2 | xargs -0r rm -f --'

注意,我在printf格式字符串周围使用双引号,而不是单引号。这是因为它们嵌入在包含ssh执行的整个命令管道的单引号中。我本可以用-printf '\''%Cs\t%p\0'\''代替,但是(这里不存在变量插值等风险)只使用双引号就更容易了。

-printf格式打印文件的上一次修改的时间戳(以秒为单位,从纪元开始,很容易按sort -z -rn排序为一个数字)、一个选项卡和文件的完整路径名。cut移除时间戳和选项卡,只留下文件名进入xargs

另一种选择是使用特雷多

代码语言:javascript
复制
ssh -i LightsailDefaultKey-eu-west-2.pem ubuntu@xxx.xxx.xxx.xxx <<-'EOF'
    find /data/ -maxdepth 1 -type f -printf '%Ts\t%p\0' | sort -z -nr | 
      head -z -n 2 | cut -z -f2 | xargs -0r rm -f --
EOF
票数 1
EN

Unix & Linux用户

发布于 2019-09-19 16:46:11

不能将scp命令和shell命令合并在同一个执行中。你能做的最好就是:

代码语言:javascript
复制
    scp -i LightsailDefaultKey-eu-west-2.pem -r ubuntu@xxx.xxx.xxx.xxx:/data/ /local/data && \
    ssh -i LightsailDefaultKey-eu-west-2.pem -r ubuntu@xxx.xxx.xxx.xxx:/data/ /local/data bash -c "cd /data; ls -1tr | head -n -2 | xargs -d '\n' rm -f --"

注意,我使用&&确保ssh不运行,除非scp成功-否则,您将删除尚未同步的文件。

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

https://unix.stackexchange.com/questions/542646

复制
相关文章

相似问题

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