DDR爱好者之家 Design By 杰米
今天遇到个白痴问题,用了linux 这么久了,竟然还出现如此低级的错误。
记录下,免得又忘记。
描述:
今天需要远程拷贝一些文件到电脑上,ubuntu的。 远程电脑是debian的。
文件和目录包含大量的空格,采用scp拷贝,例:
scp -r root@192.168.0.51:/home/xxj/Documents/files/xx xx jj.tar.gz ./
最开始就意识到了是空格问题,就采用了 文件空格前加“\”,死活不行,
scp -r root@192.168.0.51:/home/xxj/Documents/files/xx\ xx\ jj.tar.gz ./
然后又使用 引号,单引号,双引号都用了,还是不行。
scp -r root@192.168.0.51:'/home/xxj/Documents/files/xx xx jj.tar.gz' ./
scp -r root@192.168.0.51:"/home/xxj/Documents/files/xx xx jj.tar.gz" ./
最后同时 在空格前加 斜杠,整个文件目录加引号才行
scp -r root@192.168.0.51:"/home/xxj/Documents/files/xx\ xx\ jj.tar.gz" ./
linux下带空格文件批量cp和scp补充:
背景:主备机同步文件失败,现在需要人工手动的在备机上补齐文件,但是发现文件名竟然有空格
主机的IP:192.168.0.90 主机文件清单名称:src_file.txt,备机文件清单名称:dst_file.txt,
从下面可以知道,主备机的文件路径和文件的名称是不一样的,同步的时候,从src_file.txt copy到dst_file.txt需要一一对应,另备机上的目录并不能保证都存在,所以需要先把备机上的目录结构先创建出来
[root@station90 file]# cat src_file.txt
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# cat dst_file.txt
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
从dst_file.txt(备机文件)可以知道,目录的级别不是一样的,也就是说第一行为6级目录,第二行却为4级目录,如何取出目录结构,先创建出目录结构呢?执行如下命令即可:
[root@station90 file]# awk -F '/' '{for (i=1;i<NF;i++) {printf $i "/"}printf "\n"}' dst_file.txt //注意i<NF,即不需要循环到最后一列,printf $i是不打印回车的,一行循环完毕后,printf "\n"会打印回车,这样的结果刚好是我们需要的
/home/dst/1038/g07/k/3/
/home/dst/10327/g04/
/home/dst/1038/g06/lhppww/
/home/dst/101117/06g090/
/home/dst/1052g056/0590/33/
[root@station90 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@station90 file]# cat /tmp/dst_dir.txt
/home/dst/1038/g07/k/3/
/home/dst/10327/g04/
/home/dst/1038/g06/lhppww/
/home/dst/101117/06g090/
/home/dst/1052g056/0590/33/
[root@station90 file]# mkdir -p $(cat /tmp/dst_dir.txt)
[root@station90 file]# ls -ld $(cat /tmp/dst_dir.txt) /目录结构已经创建出来了
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/101117/06g090/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/10327/g04/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1038/g06/lhppww/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1038/g07/k/3/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1052g056/0590/33/
part1:单纯的从本机copy到本机的其他目录,会比较简单,如下所示:
[root@station90 file]# sed -i -e "s/^/cp \"/g" -e "s/$/\"/g" src_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat src_file.txt
cp "/home/src/10329/g0197/k/19xiazai h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp"
cp "/home/src/101117/060/090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]#paste -d ' ' src_file.txt dst_file.txt > cp.sh //src_file.txt和dst_file.txt文本以空格作为分隔符合成一个文件
[root@station90 file]#cat cp.sh
cp "/home/src/10329/g0197/k/19xiazai h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
cp "/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" cp.sh //在脚本中添加#!/bin/bash
[root@station90 file]# cat cp.sh
#!/bin/bash
cp "/home/src/10329/g0197/k/19xiazai h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
cp "/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x cp.sh
[root@station90 file]# ls -l "/home/dst/1038/g07/k/3/10290upload h264.3gp" //执行cp.sh脚本前,文件是不存在的
ls: /home/dst/1038/g07/k/3/10290upload h264.3gp: 没有那个文件或目录
[root@station90 file]# ./cp.sh
[root@station90 file]# ls -l "/home/dst/1038/g07/k/3/10290upload h264.3gp" //ok,copy成功
-rw-r--r-- 1 root root 0 11-10 17:44 /home/dst/1038/g07/k/3/10290upload h264.3gp
part2 从远成主机scp文件过来,先举例一错误的例子,正确的总是慢慢的总结出来的
执行rm.sh,删除刚才copy过来的文件
[root@station90 file]# cat rm.sh
#!/bin/bash
rm -f "/home/dst/1038/g07/k/3/10290upload h264.3gp"
rm -f "/home/dst/10327/g04/10ng h264 upload.3gp"
rm -f "/home/dst/1038/g06/lhppww/10upload h263.3gp"
rm -f "/home/dst/101117/06g090/1011.3gp"
rm -f "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# ./rm.sh
[root@station90 file]# sed -i -e "s/^/scp\ root\@192\.168\.0\.90\:\"/g" -e "s/$/\"/g" src_file.txt
//在src_file.txt文件的开头和结尾添加双引号,同时添加root@192.168.0.90:,最终如下所示
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp"
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# paste -d ' ' src_file.txt dst_file.txt > scp.sh //合成shell脚本步骤一
[root@station90 file]# cat scp.sh
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh //合成shell脚本步骤二
[root@station90 file]# cat scp.sh //看过去没有问题是吧,借鉴上面的part1部分cp得到scp嘛,其实是有问题的
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh //发现了吧,从远程主机找不到这些文件,只有没有空格的文件名称才可以复制过来
scp: /home/src/10329/g0197/k/19xiazai: No such file or directory
scp: h264.3gp: No such file or directory
scp: /home/src/10327/g0194/10ng: No such file or directory
scp: h264: No such file or directory
scp: xiazai.3gp: No such file or directory
scp: /home/src/10329/g0196/lh/10xiazai: No such file or directory
scp: h263.3gp: No such file or directory
1011.3gp 100% 0 0.0KB/s 00:00
scp: /home/src/10520/056/0590/99833/10x_04: No such file or directory
scp: 0_0_3.3gp: No such file or directory
继续错误的里程,想想,肯定是空格没有进行转义,遂src_file.txt文件和src_file.txt文件中的空格都进行转义,于是下面错误的过程来了:
[root@station90 file]# cat src_file.txt //原文件内容格式
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" src_file.txt //文件的开头和结尾加上双引号
[root@station90 file]# cat src_file.txt
"/home/src/10329/g0197/k/19xiazai h264.3gp"
"/home/src/10327/g0194/10ng h264 xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai h263.3gp"
"/home/src/101117/060/090/1011.3gp"
"/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "s/ /\\\ /g" src_file.txt //对空格进行转义
[root@station90 file]# cat src_file.txt
"/home/src/10329/g0197/k/19xiazai\ h264.3gp"
"/home/src/10327/g0194/10ng\ h264\ xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai\ h263.3gp"
"/home/src/101117/060/090/1011.3gp"
"/home/src/10520/056/0590/99833/10x_04\ 0_0_3.3gp"
[root@station90 file]# cat dst_file.txt ///原文件内容格式
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" -e "s/ /\\\ /g" dst_file.txt //在文件开头和结尾加双引号和空格进行转义
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload\ h264.3gp"
"/home/dst/10327/g04/10ng\ h264\ upload.3gp"
"/home/dst/1038/g06/lhppww/10upload\ h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04\ 0_0_3.3gp"
[root@station90 file]# sed -i "s/^/scp\ root\@192\.168\.0\.90\:/g" src_file.txt //对远程文件(192.168.0.90)src_file.txt加上scp root@192.168.0.90:
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh //对文件加上#!/bin/bash
[root@station90 file]# cat scp.sh
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp" "/home/dst/1038/g07/k/3/10290upload\ h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp" "/home/dst/10327/g04/10ng\ h264\ upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp" "/home/dst/1038/g06/lhppww/10upload\ h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04\ 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh //执行脚本,看过去是都成功了吧,但是……
19xiazai h264.3gp 100% 0 0.0KB/s 00:00
10ng h264 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h263.3gp 100% 0 0.0KB/s 00:00
1011.3gp 100% 0 0.0KB/s 00:00
10x_04 0_0_3.3gp 100% 0 0.0KB/s 00:00
[root@station90 file]#
[root@station90 file]# cd /home/dst/1038/g07/k/3/
[root@station90 3]# ls //看到没有,复制到本地的文件有了\
10290upload\ h264.3gp
[root@station90 dst]# pwd
/home/dst
[root@station90 dst]# find ./ -type f
./10327/g04/10ng\ h264\ upload.3gp
./1038/g07/k/3/10290upload\ h264.3gp
./1038/g06/lhppww/10upload\ h263.3gp
./1052g056/0590/33/10x_04\ 0_0_3.3gp
[root@station90 dst]# find ./ -type f -exec rm {} \; //删除复制过来错误的文件
[root@station90 dst]# find ./ -type f
[root@station90 file]# cat src_file.txt //下面的步骤是正确的,其实只需要对src_file.txt文件的空格加上\进行转义,对本地
dst_file.txt文件只需要在文件的开头结尾加上双引号,就好了
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# sed -i "s/ /\\\ /g" src_file.txt
[root@station90 file]# cat src_file.txt
/home/src/10329/g0197/k/19xiazai\ h264.3gp
/home/src/10327/g0194/10ng\ h264\ xiazai.3gp
/home/src/10329/g0196/lh/10xiazai\ h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04\ 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/scp\ root\@192\.168\.0\.90\:\"/g" -e "s/$/\"/g" src_file.txt
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp"
[root@station90 file]# cat dst_file.txt
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh
[root@station90 file]# cat scp.sh //最终的脚本样本
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh
19xiazai h264.3gp 100% 0 0.0KB/s 00:00
10ng h264 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h263.3gp 100% 0 0.0KB/s 00:00
1011.3gp 100% 0 0.0KB/s 00:00
10x_04 0_0_3.3gp 100% 0 0.0KB/s 00:00
[root@station90 file]# cd /home/dst
[root@station90 dst]# find ./ -type f //现在OK了,linux水平不行,被折磨了2天呐
./10327/g04/10ng h264 upload.3gp
./101117/06g090/1011.3gp
./1038/g07/k/3/10290upload h264.3gp
./1038/g06/lhppww/10upload h263.3gp
./1052g056/0590/33/10x_04 0_0_3.3gp
记录下,免得又忘记。
描述:
今天需要远程拷贝一些文件到电脑上,ubuntu的。 远程电脑是debian的。
文件和目录包含大量的空格,采用scp拷贝,例:
scp -r root@192.168.0.51:/home/xxj/Documents/files/xx xx jj.tar.gz ./
最开始就意识到了是空格问题,就采用了 文件空格前加“\”,死活不行,
scp -r root@192.168.0.51:/home/xxj/Documents/files/xx\ xx\ jj.tar.gz ./
然后又使用 引号,单引号,双引号都用了,还是不行。
scp -r root@192.168.0.51:'/home/xxj/Documents/files/xx xx jj.tar.gz' ./
scp -r root@192.168.0.51:"/home/xxj/Documents/files/xx xx jj.tar.gz" ./
最后同时 在空格前加 斜杠,整个文件目录加引号才行
scp -r root@192.168.0.51:"/home/xxj/Documents/files/xx\ xx\ jj.tar.gz" ./
linux下带空格文件批量cp和scp补充:
背景:主备机同步文件失败,现在需要人工手动的在备机上补齐文件,但是发现文件名竟然有空格
主机的IP:192.168.0.90 主机文件清单名称:src_file.txt,备机文件清单名称:dst_file.txt,
从下面可以知道,主备机的文件路径和文件的名称是不一样的,同步的时候,从src_file.txt copy到dst_file.txt需要一一对应,另备机上的目录并不能保证都存在,所以需要先把备机上的目录结构先创建出来
[root@station90 file]# cat src_file.txt
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# cat dst_file.txt
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
从dst_file.txt(备机文件)可以知道,目录的级别不是一样的,也就是说第一行为6级目录,第二行却为4级目录,如何取出目录结构,先创建出目录结构呢?执行如下命令即可:
[root@station90 file]# awk -F '/' '{for (i=1;i<NF;i++) {printf $i "/"}printf "\n"}' dst_file.txt //注意i<NF,即不需要循环到最后一列,printf $i是不打印回车的,一行循环完毕后,printf "\n"会打印回车,这样的结果刚好是我们需要的
/home/dst/1038/g07/k/3/
/home/dst/10327/g04/
/home/dst/1038/g06/lhppww/
/home/dst/101117/06g090/
/home/dst/1052g056/0590/33/
[root@station90 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@station90 file]# cat /tmp/dst_dir.txt
/home/dst/1038/g07/k/3/
/home/dst/10327/g04/
/home/dst/1038/g06/lhppww/
/home/dst/101117/06g090/
/home/dst/1052g056/0590/33/
[root@station90 file]# mkdir -p $(cat /tmp/dst_dir.txt)
[root@station90 file]# ls -ld $(cat /tmp/dst_dir.txt) /目录结构已经创建出来了
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/101117/06g090/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/10327/g04/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1038/g06/lhppww/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1038/g07/k/3/
drwxr-xr-x 2 root root 4096 11-10 17:37 /home/dst/1052g056/0590/33/
part1:单纯的从本机copy到本机的其他目录,会比较简单,如下所示:
[root@station90 file]# sed -i -e "s/^/cp \"/g" -e "s/$/\"/g" src_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat src_file.txt
cp "/home/src/10329/g0197/k/19xiazai h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp"
cp "/home/src/101117/060/090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]#paste -d ' ' src_file.txt dst_file.txt > cp.sh //src_file.txt和dst_file.txt文本以空格作为分隔符合成一个文件
[root@station90 file]#cat cp.sh
cp "/home/src/10329/g0197/k/19xiazai h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
cp "/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" cp.sh //在脚本中添加#!/bin/bash
[root@station90 file]# cat cp.sh
#!/bin/bash
cp "/home/src/10329/g0197/k/19xiazai h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
cp "/home/src/10327/g0194/10ng h264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
cp "/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
cp "/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x cp.sh
[root@station90 file]# ls -l "/home/dst/1038/g07/k/3/10290upload h264.3gp" //执行cp.sh脚本前,文件是不存在的
ls: /home/dst/1038/g07/k/3/10290upload h264.3gp: 没有那个文件或目录
[root@station90 file]# ./cp.sh
[root@station90 file]# ls -l "/home/dst/1038/g07/k/3/10290upload h264.3gp" //ok,copy成功
-rw-r--r-- 1 root root 0 11-10 17:44 /home/dst/1038/g07/k/3/10290upload h264.3gp
part2 从远成主机scp文件过来,先举例一错误的例子,正确的总是慢慢的总结出来的
执行rm.sh,删除刚才copy过来的文件
[root@station90 file]# cat rm.sh
#!/bin/bash
rm -f "/home/dst/1038/g07/k/3/10290upload h264.3gp"
rm -f "/home/dst/10327/g04/10ng h264 upload.3gp"
rm -f "/home/dst/1038/g06/lhppww/10upload h263.3gp"
rm -f "/home/dst/101117/06g090/1011.3gp"
rm -f "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# ./rm.sh
[root@station90 file]# sed -i -e "s/^/scp\ root\@192\.168\.0\.90\:\"/g" -e "s/$/\"/g" src_file.txt
//在src_file.txt文件的开头和结尾添加双引号,同时添加root@192.168.0.90:,最终如下所示
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp"
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt //在文本中的开头和结尾添加双引号
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# paste -d ' ' src_file.txt dst_file.txt > scp.sh //合成shell脚本步骤一
[root@station90 file]# cat scp.sh
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh //合成shell脚本步骤二
[root@station90 file]# cat scp.sh //看过去没有问题是吧,借鉴上面的part1部分cp得到scp嘛,其实是有问题的
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazaih264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh264 xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_040_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh //发现了吧,从远程主机找不到这些文件,只有没有空格的文件名称才可以复制过来
scp: /home/src/10329/g0197/k/19xiazai: No such file or directory
scp: h264.3gp: No such file or directory
scp: /home/src/10327/g0194/10ng: No such file or directory
scp: h264: No such file or directory
scp: xiazai.3gp: No such file or directory
scp: /home/src/10329/g0196/lh/10xiazai: No such file or directory
scp: h263.3gp: No such file or directory
1011.3gp 100% 0 0.0KB/s 00:00
scp: /home/src/10520/056/0590/99833/10x_04: No such file or directory
scp: 0_0_3.3gp: No such file or directory
继续错误的里程,想想,肯定是空格没有进行转义,遂src_file.txt文件和src_file.txt文件中的空格都进行转义,于是下面错误的过程来了:
[root@station90 file]# cat src_file.txt //原文件内容格式
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" src_file.txt //文件的开头和结尾加上双引号
[root@station90 file]# cat src_file.txt
"/home/src/10329/g0197/k/19xiazai h264.3gp"
"/home/src/10327/g0194/10ng h264 xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai h263.3gp"
"/home/src/101117/060/090/1011.3gp"
"/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "s/ /\\\ /g" src_file.txt //对空格进行转义
[root@station90 file]# cat src_file.txt
"/home/src/10329/g0197/k/19xiazai\ h264.3gp"
"/home/src/10327/g0194/10ng\ h264\ xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai\ h263.3gp"
"/home/src/101117/060/090/1011.3gp"
"/home/src/10520/056/0590/99833/10x_04\ 0_0_3.3gp"
[root@station90 file]# cat dst_file.txt ///原文件内容格式
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" -e "s/ /\\\ /g" dst_file.txt //在文件开头和结尾加双引号和空格进行转义
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload\ h264.3gp"
"/home/dst/10327/g04/10ng\ h264\ upload.3gp"
"/home/dst/1038/g06/lhppww/10upload\ h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04\ 0_0_3.3gp"
[root@station90 file]# sed -i "s/^/scp\ root\@192\.168\.0\.90\:/g" src_file.txt //对远程文件(192.168.0.90)src_file.txt加上scp root@192.168.0.90:
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh //对文件加上#!/bin/bash
[root@station90 file]# cat scp.sh
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp" "/home/dst/1038/g07/k/3/10290upload\ h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp" "/home/dst/10327/g04/10ng\ h264\ upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp" "/home/dst/1038/g06/lhppww/10upload\ h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04\ 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh //执行脚本,看过去是都成功了吧,但是……
19xiazai h264.3gp 100% 0 0.0KB/s 00:00
10ng h264 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h263.3gp 100% 0 0.0KB/s 00:00
1011.3gp 100% 0 0.0KB/s 00:00
10x_04 0_0_3.3gp 100% 0 0.0KB/s 00:00
[root@station90 file]#
[root@station90 file]# cd /home/dst/1038/g07/k/3/
[root@station90 3]# ls //看到没有,复制到本地的文件有了\
10290upload\ h264.3gp
[root@station90 dst]# pwd
/home/dst
[root@station90 dst]# find ./ -type f
./10327/g04/10ng\ h264\ upload.3gp
./1038/g07/k/3/10290upload\ h264.3gp
./1038/g06/lhppww/10upload\ h263.3gp
./1052g056/0590/33/10x_04\ 0_0_3.3gp
[root@station90 dst]# find ./ -type f -exec rm {} \; //删除复制过来错误的文件
[root@station90 dst]# find ./ -type f
[root@station90 file]# cat src_file.txt //下面的步骤是正确的,其实只需要对src_file.txt文件的空格加上\进行转义,对本地
dst_file.txt文件只需要在文件的开头结尾加上双引号,就好了
/home/src/10329/g0197/k/19xiazai h264.3gp
/home/src/10327/g0194/10ng h264 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04 0_0_3.3gp
[root@station90 file]# sed -i "s/ /\\\ /g" src_file.txt
[root@station90 file]# cat src_file.txt
/home/src/10329/g0197/k/19xiazai\ h264.3gp
/home/src/10327/g0194/10ng\ h264\ xiazai.3gp
/home/src/10329/g0196/lh/10xiazai\ h263.3gp
/home/src/101117/060/090/1011.3gp
/home/src/10520/056/0590/99833/10x_04\ 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/scp\ root\@192\.168\.0\.90\:\"/g" -e "s/$/\"/g" src_file.txt
[root@station90 file]# cat src_file.txt
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp"
[root@station90 file]# cat dst_file.txt
/home/dst/1038/g07/k/3/10290upload h264.3gp
/home/dst/10327/g04/10ng h264 upload.3gp
/home/dst/1038/g06/lhppww/10upload h263.3gp
/home/dst/101117/06g090/1011.3gp
/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp
[root@station90 file]# sed -i -e "s/^/\"/g" -e "s/$/\"/g" dst_file.txt
[root@station90 file]# cat dst_file.txt
"/home/dst/1038/g07/k/3/10290upload h264.3gp"
"/home/dst/10327/g04/10ng h264 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h263.3gp"
"/home/dst/101117/06g090/1011.3gp"
"/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# sed -i "1,1s/^/\#\!\/bin\/bash\n/g" scp.sh
[root@station90 file]# cat scp.sh //最终的脚本样本
#!/bin/bash
scp root@192.168.0.90:"/home/src/10329/g0197/k/19xiazai\h264.3gp" "/home/dst/1038/g07/k/3/10290upload h264.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h264\ xiazai.3gp" "/home/dst/10327/g04/10ng h264 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h263.3gp" "/home/dst/1038/g06/lhppww/10upload h263.3gp"
scp root@192.168.0.90:"/home/src/101117/060/090/1011.3gp" "/home/dst/101117/06g090/1011.3gp"
scp root@192.168.0.90:"/home/src/10520/056/0590/99833/10x_04\0_0_3.3gp" "/home/dst/1052g056/0590/33/10x_04 0_0_3.3gp"
[root@station90 file]# chmod +x scp.sh
[root@station90 file]# ./scp.sh
19xiazai h264.3gp 100% 0 0.0KB/s 00:00
10ng h264 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h263.3gp 100% 0 0.0KB/s 00:00
1011.3gp 100% 0 0.0KB/s 00:00
10x_04 0_0_3.3gp 100% 0 0.0KB/s 00:00
[root@station90 file]# cd /home/dst
[root@station90 dst]# find ./ -type f //现在OK了,linux水平不行,被折磨了2天呐
./10327/g04/10ng h264 upload.3gp
./101117/06g090/1011.3gp
./1038/g07/k/3/10290upload h264.3gp
./1038/g06/lhppww/10upload h263.3gp
./1052g056/0590/33/10x_04 0_0_3.3gp
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月24日
2024年11月24日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]