Linux中传输文件的scp和rsync命令

发布时间 2023-05-27 23:46:08作者: 砚台是黑的

scp

# 利用ssh传输文件
# 在linux下一般用scp这个命令来通过ssh传输文件。

# 1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)

# 例如scp root@192.168.0.101:/var/www/test.txt  把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

# 2、上传本地文件到服务器
scp /path/filename username@servername:/path   

# 例如scp /var/www/test.php  root@192.168.0.101:/var/www/  把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

# 3、从服务器下载整个目录
scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

# 例如:scp -r root@192.168.0.101:/var/www/test  /var/www/  

# 4、上传目录到服务器
scp  -r local_dir username@servername:remote_dir

# 例如:scp -r test  root@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器的/var/www/ 目录

sudo scp -r include lib user@ip:~

# 注:目标服务器要开启写入权限。

rsync

# 1、将文件从本地同步拷贝至远程目录
rsync -avz /root/temp/ user@ip:/root/temp

# 2、将文件从远程目录同步至本地
rsync -avz user@ip:/root/temp /root/temp
# 比如:
rsync -avzt --progress user@ip:/storage/data/xxx.mp4 /home/bng/sil/sil-example-data/sil-test-datas

# 3、不要覆盖目标位置上已经修改的文件
rsync -avzu user@ip:/root/temp /root/

# 4、在传输过程中查看rsync进度
rsync -avz --progress /root/temp/ user@ip:/root/temp

# 5、在目标目录中删除源目录不存在的文件
# 如果文件不在源中而是在目标中存在,则可能希望在rsync同步期间删除目标上的文件,在这种情况下,请使用 --delete选项  rsync使用--delete选项删除目标目录中不包含源目录的文件
rsync -avz --delete /root/temp user@ip:/root

# 6、文件传输过程中的include和exclude模式
# rsync允许在进行同步时提供要包括和排除文件或目录的模式
# 例如:在上面的示例中,它仅包括以’P’开头的文件或目录,并排除所有其他文件
rsync -avz --include 'P*' --exclude '*' user@ip:/var/lib/rpm/ /root/temp/

# 7、不传输大文件,可以使用 rsync --max-size选项告诉rsync不要传输大于指定大小的文件
# -max-size=1M使rsync仅传输小于或等于1M的文件。单位可以是K,M,G等
# 还可以使用--min-size=参数,指定传输最小文件的大小
rsync -avz --max-size='1M' root@192.168.43.137:/var/lib/rpm/ /root/temp/

# 8、拷贝指定文件
# -t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
# -a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"
# -z :传输时进行压缩提高效率。
# -v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息
rsync -avzt --progress /storage/sil-test-datas/文件 USER@IP:/storage/sil-test-datas

# 下面的是普通模式,耗费带宽
# 两种模式都是从当前机器复制一份指定文件到远端IP机器的指定位置
rsync -av --progress --inplace --rsh='ssh -p 22' ./文件 用户名@远端目标IP:/storage/sil-test-datas
rsync -avzt --progress ./sil-example-data.tar.gz username@ip:~/sil