日常工作中需要經常從遠端或本地伺服器拷貝/移動大量檔案。遇到檔案比較多比較散的時候速度較慢,所以在想有沒有較快的方式。經過蒐羅、整理、驗證,大概有以下幾種。
首先,無論本地還是遠端,需要移動或拷貝的檔案較多且都不太大時,用cp命令和mv命令效率較低,可以先使用tar工具對將要拷貝/移動的內容進行打包/壓縮,之後再進行拷貝/移動,最後再解包/解壓縮。
另外,也是很關鍵的乙個技巧,即,不必在tar打包/壓縮完畢之後再進行拷貝,解包/解壓縮,可以通過管道一邊打包/壓縮另一邊執行拷貝解包/解壓縮。
比如,tar命令可以和nc命令結合可以快速在兩台機器之間傳輸檔案和目錄:
b機器:
nc -l 5555 |tar -c /tmp/test/ -xf -
a機器:
tar cf - /tmp/test/ |nc b'ip 5555
上述步驟將a機器/tmp/test/下的內容拷貝到b機器對應的目錄中,其中tar cf - /tmp/test/ |nc b'ip 5555 將內容邊打包邊通過管道和nc命令傳輸到由對應ip位址和5555埠傳到b機器,nc -l 5555 |tar -c /tmp/test/ -xf - 監聽本機的555埠,並將接收到的內容解包至指定的目錄(-c引數指定目標目錄)
此外,tar還可與scp、ssh命令結合:
在a機打包後,複製到b機器並解包
tar -cf - /tmp/test | ssh b'ip "cd /tmp; tar -xf -"
在a機打包,並將打包好的檔案複製到b機
tar -cf - /tmp/test | ssh b'ip "cd /tmp; cat - > test.tar"
tar -cf - /tmp/test | scp - b'user@b'ip:/tmp
將a機的打包檔案,複製到b機並解包
zcat test.tar | ssh b'ip "cd /tmp; tar -xf -"
也可以直接在本地這麼使用:
cd /tmp/test1
tar -cf - . | (cd /tmp/test2 ; tar -xvpf -)
但有人試驗後得出結論本地直接用cp較快
另外一些小技巧:
拷貝時除了拷貝單個檔案還會拷貝目錄,有時需要連同檔案/目錄的屬性一同拷貝。可以在cp命令中使用-r引數遞迴拷貝目錄,使用-p引數拷貝檔案保留屬性(預設是:mode,ownership,timestamps也可以通過 --preserve[=attr_list]指定要特別保留的屬性如:context, links,xattr, all),使用-d引數拷貝檔案保留連線。或者簡單的使用-a引數(相當於使用-dr --preserve=all)
如果想看到拷貝大量小檔案的進度可以寫乙個簡單的小指令碼:
cd /tmp/test
for i in *
docp $i 目標目錄
echo $i is ok....
done
最後補充一條不是技巧的技巧:在使用乙個工具完成一項任務之前,先思考當前用的工具是不是最適合的工具?有沒有更好的工具或辦法?如果工具確實很適用於當前任務,那麼在使用該工具時有沒有特殊的技巧可以提高工作效率?(通常,檢視幫助文件可有意外收穫)。
Linux系統之間傳輸檔案
如何在linux系統之間傳輸檔案及資料夾,簡單介紹下linux系統自帶的命令scp,使用這個命令進行兩台linux系統伺服器之間進行傳輸檔案及資料夾的操作。一 準備工作 用ping命令,檢查兩台linux系統伺服器網路是否通暢。若不暢通,可檢視防火牆是否開啟,若開啟可備份後暫時關閉。二 拷貝檔案 在...
linux系統之間互傳檔案
參考 1.檔案複製 本機 遠端伺服器 scp home shaoxiaohu test1.txt shaoxiaohu 172.16.18.1 home test2.txt 其中,test1為原始檔,test2為目標檔案,shaoxiaohu 172.16.18.1為遠端伺服器的使用者名稱和ip位址...
linux系統之間互傳檔案
1.檔案複製 本機 遠端伺服器 scp home shaoxiaohu test1.txt shaoxiaohu 172.16.18.1 home test2.txt 其中,test1為原始檔,test2為目標檔案,shaoxiaohu 172.16.18.1為遠端伺服器的使用者名稱和ip位址 2....