我正在尝试复制目录,但仅复制特定文件。
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 -
f
tar
tar
- 该
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/