位置: 编程技术 - 正文

linux下scp远程拷贝包含空格的目录或者文件的解决方法

编辑:rootadmin
今天遇到个白痴问题,用了linux 这么久了,竟然还出现如此低级的错误。 记录下,免得又忘记。 描述: 今天需要远程拷贝一些文件到电脑上,ubuntu的。 远程电脑是debian的。 文件和目录包含大量的空格,采用scp拷贝,例: scp -r root@..0.:/home/xxj/Documents/files/xx xx jj.tar.gz ./ 最开始就意识到了是空格问题,就采用了 文件空格前加“”,死活不行, scp -r root@..0.:/home/xxj/Documents/files/xx xx jj.tar.gz ./ 然后又使用 引号,单引号,双引号都用了,还是不行。 scp -r root@..0.:'/home/xxj/Documents/files/xx xx jj.tar.gz' ./ scp -r root@..0.:"/home/xxj/Documents/files/xx xx jj.tar.gz" ./ 最后同时 在空格前加 斜杠,整个文件目录加引号才行 scp -r root@..0.:"/home/xxj/Documents/files/xx xx jj.tar.gz" ./ linux下带空格文件批量cp和scp补充: 背景:主备机同步文件失败,现在需要人工手动的在备机上补齐文件,但是发现文件名竟然有空格 主机的IP:..0. 主机文件清单名称:src_file.txt,备机文件清单名称:dst_file.txt, 从下面可以知道,主备机的文件路径和文件的名称是不一样的,同步的时候,从src_file.txt copy到dst_file.txt需要一一对应,另备机上的目录并不能保证都存在,所以需要先把备机上的目录结构先创建出来 [root@station file]# cat src_file.txt /home/src//g/k/xiazai h.3gp /home/src//g/ng h xiazai.3gp /home/src//g/lh/xiazai h.3gp /home/src////.3gp /home/src/////x_ 0_0_3.3gp [root@station file]# cat dst_file.txt /home/dst//g/k/3/upload h.3gp /home/dst//g/ng h upload.3gp /home/dst//g/lhppww/upload h.3gp /home/dst//g/.3gp /home/dst/g///x_ 0_0_3.3gp 从dst_file.txt(备机文件)可以知道,目录的级别不是一样的,也就是说第一行为6级目录,第二行却为4级目录,如何取出目录结构,先创建出目录结构呢?执行如下命令即可: [root@station file]# awk -F '/' '{for (i=1;i<NF;i++) {printf $i "/"}printf "n"}' dst_file.txt //注意i<NF,即不需要循环到最后一列,printf $i是不打印回车的,一行循环完毕后,printf "n"会打印回车,这样的结果刚好是我们需要的 /home/dst//g/k/3/ /home/dst//g/ /home/dst//g/lhppww/ /home/dst//g/ /home/dst/g/// [root@station file]# awk '{print $1}' dst_file.txt | awk -F '/' '{print substr($0,1,(length($0)-length($NF)))}' > /tmp/dst_dir.txt //根据dst_file.txt的特点,先执行awk '{print $1}' dst_file.txt 以空格作为分隔符,取出第一列,这样取出的就没有空格,$0为文本里面包含的所有内容,再通过截取字符串的方式,substr($0(去除空格的文本本身),1(从第一个字符开始),(length($0)-length($NF))所有字符的长度减去最后一列的字符长度,就等于我们需要的字符长度,也就是从1,我们需要的字符长度,结果就是我们需要的了 [root@station file]# cat /tmp/dst_dir.txt /home/dst//g/k/3/ /home/dst//g/ /home/dst//g/lhppww/ /home/dst//g/ /home/dst/g/// [root@station file]# mkdir -p $(cat /tmp/dst_dir.txt) [root@station file]# ls -ld $(cat /tmp/dst_dir.txt) /目录结构已经创建出来了 drwxr-xr-x 2 root root - : /home/dst//g/ drwxr-xr-x 2 root root - : /home/dst//g/ drwxr-xr-x 2 root root - : /home/dst//g/lhppww/ drwxr-xr-x 2 root root - : /home/dst//g/k/3/ drwxr-xr-x 2 root root - : /home/dst/g/// part1:单纯的从本机copy到本机的其他目录,会比较简单,如下所示: [root@station file]# sed -i -e "s/^/cp "/g" -e "s/$/"/g" src_file.txt //在文本中的开头和结尾添加双引号 [root@station file]# cat src_file.txt cp "/home/src//g/k/xiazai h.3gp" cp "/home/src//g/ng h xiazai.3gp" cp "/home/src//g/lh/xiazai h.3gp" cp "/home/src////.3gp" cp "/home/src/////x_ 0_0_3.3gp" [root@station file]# sed -i -e "s/^/"/g" -e "s/$/"/g" dst_file.txt //在文本中的开头和结尾添加双引号 [root@station file]# cat dst_file.txt "/home/dst//g/k/3/upload h.3gp" "/home/dst//g/ng h upload.3gp" "/home/dst//g/lhppww/upload h.3gp" "/home/dst//g/.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]#paste -d ' ' src_file.txt dst_file.txt > cp.sh //src_file.txt和dst_file.txt文本以空格作为分隔符合成一个文件 [root@station file]#cat cp.sh cp "/home/src//g/k/xiazai h.3gp" "/home/dst//g/k/3/upload h.3gp" cp "/home/src//g/ng h xiazai.3gp" "/home/dst//g/ng h upload.3gp" cp "/home/src//g/lh/xiazai h.3gp" "/home/dst//g/lhppww/upload h.3gp" cp "/home/src////.3gp" "/home/dst//g/.3gp" cp "/home/src/////x_ 0_0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# sed -i "1,1s/^/#!/bin/bashn/g" cp.sh //在脚本中添加#!/bin/bash [root@station file]# cat cp.sh #!/bin/bash cp "/home/src//g/k/xiazai h.3gp" "/home/dst//g/k/3/upload h.3gp" cp "/home/src//g/ng h xiazai.3gp" "/home/dst//g/ng h upload.3gp" cp "/home/src//g/lh/xiazai h.3gp" "/home/dst//g/lhppww/upload h.3gp" cp "/home/src////.3gp" "/home/dst//g/.3gp" cp "/home/src/////x_ 0_0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# chmod +x cp.sh [root@station file]# ls -l "/home/dst//g/k/3/upload h.3gp" //执行cp.sh脚本前,文件是不存在的 ls: /home/dst//g/k/3/upload h.3gp: 没有那个文件或目录 [root@station file]# ./cp.sh [root@station file]# ls -l "/home/dst//g/k/3/upload h.3gp" //ok,copy成功 -rw-r--r-- 1 root root 0 - : /home/dst//g/k/3/upload h.3gp part2 从远成主机scp文件过来,先举例一错误的例子,正确的总是慢慢的总结出来的 执行rm.sh,删除刚才copy过来的文件 [root@station file]# cat rm.sh #!/bin/bash rm -f "/home/dst//g/k/3/upload h.3gp" rm -f "/home/dst//g/ng h upload.3gp" rm -f "/home/dst//g/lhppww/upload h.3gp" rm -f "/home/dst//g/.3gp" rm -f "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# ./rm.sh [root@station file]# sed -i -e "s/^/scp root@..0.:"/g" -e "s/$/"/g" src_file.txt //在src_file.txt文件的开头和结尾添加双引号,同时添加root@..0.:,最终如下所示 [root@station file]# cat src_file.txt scp root@..0.:"/home/src//g/k/xiazaih.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" scp root@..0.:"/home/src////.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" [root@station file]# sed -i -e "s/^/"/g" -e "s/$/"/g" dst_file.txt //在文本中的开头和结尾添加双引号 [root@station file]# cat dst_file.txt "/home/dst//g/k/3/upload h.3gp" "/home/dst//g/ng h upload.3gp" "/home/dst//g/lhppww/upload h.3gp" "/home/dst//g/.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# paste -d ' ' src_file.txt dst_file.txt > scp.sh //合成shell脚本步骤一 [root@station file]# cat scp.sh scp root@..0.:"/home/src//g/k/xiazaih.3gp" "/home/dst//g/k/3/upload h.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" "/home/dst//g/ng h upload.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" "/home/dst//g/lhppww/upload h.3gp" scp root@..0.:"/home/src////.3gp" "/home/dst//g/.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# sed -i "1,1s/^/#!/bin/bashn/g" scp.sh //合成shell脚本步骤二 [root@station file]# cat scp.sh //看过去没有问题是吧,借鉴上面的part1部分cp得到scp嘛,其实是有问题的 #!/bin/bash scp root@..0.:"/home/src//g/k/xiazaih.3gp" "/home/dst//g/k/3/upload h.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" "/home/dst//g/ng h upload.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" "/home/dst//g/lhppww/upload h.3gp" scp root@..0.:"/home/src////.3gp" "/home/dst//g/.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# chmod +x scp.sh [root@station file]# ./scp.sh //发现了吧,从远程主机找不到这些文件,只有没有空格的文件名称才可以复制过来 scp: /home/src//g/k/xiazai: No such file or directory scp: h.3gp: No such file or directory scp: /home/src//g/ng: No such file or directory scp: h: No such file or directory scp: xiazai.3gp: No such file or directory scp: /home/src//g/lh/xiazai: No such file or directory scp: h.3gp: No such file or directory .3gp % 0 0.0KB/s : scp: /home/src/////x_: No such file or directory scp: 0_0_3.3gp: No such file or directory 继续错误的里程,想想,肯定是空格没有进行转义,遂src_file.txt文件和src_file.txt文件中的空格都进行转义,于是下面错误的过程来了: [root@station file]# cat src_file.txt //原文件内容格式 /home/src//g/k/xiazai h.3gp /home/src//g/ng h xiazai.3gp /home/src//g/lh/xiazai h.3gp /home/src////.3gp /home/src/////x_ 0_0_3.3gp [root@station file]# sed -i -e "s/^/"/g" -e "s/$/"/g" src_file.txt //文件的开头和结尾加上双引号 [root@station file]# cat src_file.txt "/home/src//g/k/xiazai h.3gp" "/home/src//g/ng h xiazai.3gp" "/home/src//g/lh/xiazai h.3gp" "/home/src////.3gp" "/home/src/////x_ 0_0_3.3gp" [root@station file]# sed -i "s/ /\ /g" src_file.txt //对空格进行转义 [root@station file]# cat src_file.txt "/home/src//g/k/xiazai h.3gp" "/home/src//g/ng h xiazai.3gp" "/home/src//g/lh/xiazai h.3gp" "/home/src////.3gp" "/home/src/////x_ 0_0_3.3gp" [root@station file]# cat dst_file.txt ///原文件内容格式 /home/dst//g/k/3/upload h.3gp /home/dst//g/ng h upload.3gp /home/dst//g/lhppww/upload h.3gp /home/dst//g/.3gp /home/dst/g///x_ 0_0_3.3gp [root@station file]# sed -i -e "s/^/"/g" -e "s/$/"/g" -e "s/ /\ /g" dst_file.txt //在文件开头和结尾加双引号和空格进行转义 [root@station file]# cat dst_file.txt "/home/dst//g/k/3/upload h.3gp" "/home/dst//g/ng h upload.3gp" "/home/dst//g/lhppww/upload h.3gp" "/home/dst//g/.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# sed -i "s/^/scp root@..0.:/g" src_file.txt //对远程文件(..0.)src_file.txt加上scp root@..0.: [root@station file]# cat src_file.txt scp root@..0.:"/home/src//g/k/xiazaih.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" scp root@..0.:"/home/src////.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" [root@station file]# sed -i "1,1s/^/#!/bin/bashn/g" scp.sh //对文件加上#!/bin/bash [root@station file]# cat scp.sh #!/bin/bash scp root@..0.:"/home/src//g/k/xiazaih.3gp" "/home/dst//g/k/3/upload h.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" "/home/dst//g/ng h upload.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" "/home/dst//g/lhppww/upload h.3gp" scp root@..0.:"/home/src////.3gp" "/home/dst//g/.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# chmod +x scp.sh [root@station file]# ./scp.sh //执行脚本,看过去是都成功了吧,但是…… xiazai h.3gp % 0 0.0KB/s : ng h xiazai.3gp % 0 0.0KB/s : xiazai h.3gp % 0 0.0KB/s : .3gp % 0 0.0KB/s : x_ 0_0_3.3gp % 0 0.0KB/s : [root@station file]# [root@station file]# cd /home/dst//g/k/3/ [root@station 3]# ls //看到没有,复制到本地的文件有了 upload h.3gp [root@station dst]# pwd /home/dst [root@station dst]# find ./ -type f .//g/ng h upload.3gp .//g/k/3/upload h.3gp .//g/lhppww/upload h.3gp ./g///x_ 0_0_3.3gp [root@station dst]# find ./ -type f -exec rm {} ; //删除复制过来错误的文件 [root@station dst]# find ./ -type f [root@station file]# cat src_file.txt //下面的步骤是正确的,其实只需要对src_file.txt文件的空格加上进行转义,对本地 dst_file.txt文件只需要在文件的开头结尾加上双引号,就好了 /home/src//g/k/xiazai h.3gp /home/src//g/ng h xiazai.3gp /home/src//g/lh/xiazai h.3gp /home/src////.3gp /home/src/////x_ 0_0_3.3gp [root@station file]# sed -i "s/ /\ /g" src_file.txt [root@station file]# cat src_file.txt /home/src//g/k/xiazai h.3gp /home/src//g/ng h xiazai.3gp /home/src//g/lh/xiazai h.3gp /home/src////.3gp /home/src/////x_ 0_0_3.3gp [root@station file]# sed -i -e "s/^/scp root@..0.:"/g" -e "s/$/"/g" src_file.txt [root@station file]# cat src_file.txt scp root@..0.:"/home/src//g/k/xiazaih.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" scp root@..0.:"/home/src////.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" [root@station file]# cat dst_file.txt /home/dst//g/k/3/upload h.3gp /home/dst//g/ng h upload.3gp /home/dst//g/lhppww/upload h.3gp /home/dst//g/.3gp /home/dst/g///x_ 0_0_3.3gp [root@station file]# sed -i -e "s/^/"/g" -e "s/$/"/g" dst_file.txt [root@station file]# cat dst_file.txt "/home/dst//g/k/3/upload h.3gp" "/home/dst//g/ng h upload.3gp" "/home/dst//g/lhppww/upload h.3gp" "/home/dst//g/.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# sed -i "1,1s/^/#!/bin/bashn/g" scp.sh [root@station file]# cat scp.sh //最终的脚本样本 #!/bin/bash scp root@..0.:"/home/src//g/k/xiazaih.3gp" "/home/dst//g/k/3/upload h.3gp" scp root@..0.:"/home/src//g/ngh xiazai.3gp" "/home/dst//g/ng h upload.3gp" scp root@..0.:"/home/src//g/lh/xiazaih.3gp" "/home/dst//g/lhppww/upload h.3gp" scp root@..0.:"/home/src////.3gp" "/home/dst//g/.3gp" scp root@..0.:"/home/src/////x__0_3.3gp" "/home/dst/g///x_ 0_0_3.3gp" [root@station file]# chmod +x scp.sh [root@station file]# ./scp.sh xiazai h.3gp % 0 0.0KB/s : ng h xiazai.3gp % 0 0.0KB/s : xiazai h.3gp % 0 0.0KB/s : .3gp % 0 0.0KB/s : x_ 0_0_3.3gp % 0 0.0KB/s : [root@station file]# cd /home/dst [root@station dst]# find ./ -type f //现在OK了,linux水平不行,被折磨了2天呐 .//g/ng h upload.3gp .//g/.3gp .//g/k/3/upload h.3gp .//g/lhppww/upload h.3gp ./g///x_ 0_0_3.3gp

推荐整理分享linux下scp远程拷贝包含空格的目录或者文件的解决方法,希望有所帮助,仅作参考,欢迎阅读内容。

linux下scp远程拷贝包含空格的目录或者文件的解决方法

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

selinux导致ftp上传失败 工作中的真实案例 这是一台squid代理服务器(一台式机,安装的是redhat5.位操作系统),每天下午4点一台服务器通过ftp上传主机数据库巡检报告到这台代理PC机的一个用户

Linux日常维护常用命令集合整理 网络命令:#ifconfig#显示网络信息,包括IP地址、数据包接收/发送情况#ifconfigeth0up#启动eth0#vi/etc/sysconfig/network-scripts/ifcfg-eth0#更改eth0配置文件#iwconfig#显示

史上最详细的mrtg(Multi Router Traffic Grapher)设置说明 MultiRouterTrafficGrapher------MRTG是一个监控网络链路流量负载的工具软件,通过snmp协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML文档方

标签: linux下scp远程拷贝包含空格的目录或者文件的解决方法

本文链接地址:https://www.jiuchutong.com/biancheng/362088.html 转载请保留说明!

上一篇:Linux中cp和scp命令的使用方法

下一篇:selinux导致ftp上传失败 工作中的真实案例(linux中ftp)

  • 怎么算固定资产
  • 进项3个点销项13个点,增值税
  • 销售是销项税还是进项税
  • 增值税申报表第25行怎么填
  • 已认证发票对方红冲应该怎么做账
  • 上期有留抵进项税额,本期如何转,如何做账
  • 新增社保工资填多少好
  • 税收分类编码不可用是什么原因
  • 环保设备折旧年限和残值率
  • 个税申报收入额怎么填
  • 房地产企业营改增前都交那些税
  • 技术转让成本包括什么
  • 预付费卡税务处理
  • 出售拆迁补偿住房违法吗
  • 公司基本账户销户需要带什么资料
  • 递延资产是长期待摊费用吗
  • 淘宝客佣金代扣款是什么意思
  • 小规模外贸公司
  • 幼儿园组织的活动幼儿一定要参加吗
  • 合并财务报表的特点
  • 股东折价入股会计分录
  • 租房修缮费扣除
  • 劳务收入不足800
  • txp1atform.exe
  • 在建工程人工费会计分录
  • 电器维修公司买什么保险
  • 事业单位年末收入怎么算
  • unity默认存储路径
  • win10系统如何更改工作组
  • 劳动合同到期补偿金怎么算
  • 审核凭证要注意哪些问题
  • 一条指令可以完成一项复杂任务吗
  • php自定义变量的方法是
  • 卡克斯劳坦恩酒店
  • python自动化selenium
  • 员工旅游费的税率是多少
  • 工程建设质保金比例
  • 取得抵债资产支付的税费一般不包括下列哪种
  • 预缴的企业所得税能抵扣企业所得额嘛
  • 年初结转增值税怎么算
  • vscode开发gui
  • 织梦作坊的微博
  • 2021增值税发票怎么开步骤
  • 如何界定人力资源管理
  • 微信支付宝等改观了人们的生活方式修改病句
  • 保理公司会计核算讲解
  • 计提增值税附加税的账务处理
  • 企业分期收款销售商品,即商品已经交付
  • 销售公司扣款制度合法吗
  • 留底税额怎么形成的
  • 预付账款未取得发票
  • 所得税后净现金流量计算
  • 工程领用原材料账务处理
  • 给员工单独买的西装会计分录
  • 展览展示服务费计入什么科目
  • 空调的折旧年限一般是多少年
  • 营改增后,小规模纳税人广联达
  • 固定资产处置相关问题
  • 资产减值损失审计程序是什么
  • 残保金在网上怎么申报
  • win10正式版版本
  • macos 安装win7
  • win7系统不兼容开不了机
  • win 7怎么设置开机启动
  • c#使用mongodb
  • ExtJS 2.0实用简明教程 之Border区域布局
  • cocos2dx适配
  • 完美解决win11间歇性掉线
  • node.js快速入门
  • javascript resources
  • 如何给textarea赋值
  • js获取表单元素
  • 很全面的成语
  • jquery设置定时器
  • 生产变压器设备
  • 顺丰快递的开票历史如何删除
  • 个人所得税全员申报什么时候开始的
  • 2021年河南省企业退休职工丧葬抚恤金标准
  • 民办非企业需要办理税务登记吗
  • 国家产业政策是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设