中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux下scp遠程拷貝包含空格的目錄或者文件的問題如何解決

發布時間:2021-07-22 14:42:28 來源:億速云 閱讀:146 作者:chen 欄目:系統運維

本篇內容介紹了“linux下scp遠程拷貝包含空格的目錄或者文件的問題如何解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!



描述:

今天需要遠程拷貝一些文件到電腦上,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 h364.3gp
/home/src/10327/g0194/10ng h364 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h363.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 h364.3gp
/home/dst/10327/g04/10ng h364 upload.3gp
/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp"
cp "/home/src/10327/g0194/10ng h364 xiazai.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h363.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 h364.3gp"
"/home/dst/10327/g04/10ng h364 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp" "/home/dst/1038/g07/k/3/10290upload h364.3gp"
cp "/home/src/10327/g0194/10ng h364 xiazai.3gp" "/home/dst/10327/g04/10ng h364 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h363.3gp" "/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp" "/home/dst/1038/g07/k/3/10290upload h364.3gp"
cp "/home/src/10327/g0194/10ng h364 xiazai.3gp" "/home/dst/10327/g04/10ng h364 upload.3gp"
cp "/home/src/10329/g0196/lh/10xiazai h363.3gp" "/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp" //執行cp.sh腳本前,文件是不存在的
ls: /home/dst/1038/g07/k/3/10290upload h364.3gp: 沒有那個文件或目錄
[root@station90 file]# ./cp.sh
[root@station90 file]# ls -l "/home/dst/1038/g07/k/3/10290upload h364.3gp" //ok,copy成功
-rw-r--r-- 1 root root 0 11-10 17:44 /home/dst/1038/g07/k/3/10290upload h364.3gp

part2 從遠成主機scp文件過來,先舉例一錯誤的例子,正確的總是慢慢的總結出來的
執行rm.sh,刪除剛才copy過來的文件
[root@station90 file]# cat rm.sh
#!/bin/bash
rm -f "/home/dst/1038/g07/k/3/10290upload h364.3gp"
rm -f "/home/dst/10327/g04/10ng h364 upload.3gp"
rm -f "/home/dst/1038/g06/lhppww/10upload h363.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/19xiazaih364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh364 xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih363.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 h364.3gp"
"/home/dst/10327/g04/10ng h364 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h363.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/19xiazaih364.3gp" "/home/dst/1038/g07/k/3/10290upload h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh364 xiazai.3gp" "/home/dst/10327/g04/10ng h364 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih363.3gp" "/home/dst/1038/g06/lhppww/10upload h363.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/19xiazaih364.3gp" "/home/dst/1038/g07/k/3/10290upload h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ngh364 xiazai.3gp" "/home/dst/10327/g04/10ng h364 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazaih363.3gp" "/home/dst/1038/g06/lhppww/10upload h363.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: h364.3gp: No such file or directory
scp: /home/src/10327/g0194/10ng: No such file or directory
scp: h364: 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: h363.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 h364.3gp
/home/src/10327/g0194/10ng h364 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h363.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 h364.3gp"
"/home/src/10327/g0194/10ng h364 xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai h363.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\ h364.3gp"
"/home/src/10327/g0194/10ng\ h364\ xiazai.3gp"
"/home/src/10329/g0196/lh/10xiazai\ h363.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 h364.3gp
/home/dst/10327/g04/10ng h364 upload.3gp
/home/dst/1038/g06/lhppww/10upload h363.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\ h364.3gp"
"/home/dst/10327/g04/10ng\ h364\ upload.3gp"
"/home/dst/1038/g06/lhppww/10upload\ h363.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\h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h364\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h363.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\h364.3gp" "/home/dst/1038/g07/k/3/10290upload\ h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h364\ xiazai.3gp" "/home/dst/10327/g04/10ng\ h364\ upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h363.3gp" "/home/dst/1038/g06/lhppww/10upload\ h363.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 //執行腳本,看過去是都成功了吧,但是&hellip;&hellip;
19xiazai h364.3gp 100% 0 0.0KB/s 00:00
10ng h364 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h363.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\ h364.3gp
[root@station90 dst]# pwd
/home/dst
[root@station90 dst]# find ./ -type f
./10327/g04/10ng\ h364\ upload.3gp
./1038/g07/k/3/10290upload\ h364.3gp
./1038/g06/lhppww/10upload\ h363.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 h364.3gp
/home/src/10327/g0194/10ng h364 xiazai.3gp
/home/src/10329/g0196/lh/10xiazai h363.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\ h364.3gp
/home/src/10327/g0194/10ng\ h364\ xiazai.3gp
/home/src/10329/g0196/lh/10xiazai\ h363.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\h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h364\ xiazai.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h363.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 h364.3gp
/home/dst/10327/g04/10ng h364 upload.3gp
/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp"
"/home/dst/10327/g04/10ng h364 upload.3gp"
"/home/dst/1038/g06/lhppww/10upload h363.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\h364.3gp" "/home/dst/1038/g07/k/3/10290upload h364.3gp"
scp root@192.168.0.90:"/home/src/10327/g0194/10ng\h364\ xiazai.3gp" "/home/dst/10327/g04/10ng h364 upload.3gp"
scp root@192.168.0.90:"/home/src/10329/g0196/lh/10xiazai\h363.3gp" "/home/dst/1038/g06/lhppww/10upload h363.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 h364.3gp 100% 0 0.0KB/s 00:00
10ng h364 xiazai.3gp 100% 0 0.0KB/s 00:00
10xiazai h363.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 h364 upload.3gp
./101117/06g090/1011.3gp
./1038/g07/k/3/10290upload h364.3gp
./1038/g06/lhppww/10upload h363.3gp
./1052g056/0590/33/10x_04 0_0_3.3gp

“linux下scp遠程拷貝包含空格的目錄或者文件的問題如何解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涿鹿县| 宣汉县| 仪陇县| 安新县| 灌南县| 阳春市| 南阳市| 乌什县| 务川| 西峡县| 双城市| 修文县| 武平县| 耿马| 丽水市| 册亨县| 岫岩| 基隆市| 普陀区| 兴业县| 平定县| 金华市| 祁门县| 湘潭市| 峡江县| 宝兴县| 灌阳县| 湖南省| 保康县| 西峡县| 集贤县| 司法| 舟曲县| 亚东县| 双柏县| 郸城县| 离岛区| 洪江市| 历史| 遂平县| 施秉县|