SCP:复制目录,但仅复制特定文件

SCP:复制目录,但仅复制特定文件

我正在尝试复制目录,但仅复制特定文件。

sudo scp -r user@ip:'ls /nas1/logs/tomcat/dev-main/dev-main*|grep localhost_access_log.2023-09-21.txt' /home/test

如果文件位于远程服务器上,

/nas1/logs/tomcat/dev-main/dev-main-1111/localhost_access_log.2023-09-21.txt    
/nas1/logs/tomcat/dev-main/dev-main-1234/localhost_access_log.2023-09-21.txt

然后我想将这样的文件复制到本地服务器。

/home/test/dev-main-1111/localhost_access_log.2023-09-21.txt
/home/test/dev-main-1234/localhost_access_log.2023-09-21.txt

我可以将 grep 与 scp 命令一起使用吗?

答案1

由于rsync未按照评论安装,tar因此您可以使用它。

ssh user@ip 'cd /nas1/logs/tomcat/ && tar cf - dev-main-*/localhost_access_log.2023-09-22.txt' | tar xf -

解释:

  • ssh user@ip '...'...在远程主机上执行命令
  • 在这种情况下,要执行的命令是cd /nas1/logs/tomcat/ && tar cv dev-main-*/localhost_access_log.2023-09-22.txt,它首先将远程目录更改为/nas1/logs/tomcat/,然后tar使用与要传输的文件匹配的 glob执行
  • tar命令带有将存档转储到标准输出的c选项(如果没有该选项,它会将其发送到默认磁带设备或标准输出,具体取决于实现和/或环境),这里是本地命令的管道。f -ftartar
  • tar xf -部分从其标准输入(管道的另一端)读取存档并提取它,保留目录结构和一些其他元数据(添加选项p以保留更多元数据)。

您应该在/home/test/.

答案2

您无法将命令放入scp路径中,但看起来您想要一组可以与标准 glob(通配符模式)匹配的文件,并且还有其他工具可以保留源路径。

这是一个:

rsync -avR 'user@ip:/nas1/logs/tomcat/./dev-main/dev-main-*/localhost_access_log.2023-09-21.txt' /home/test/

相关内容