前言
-
從 remote server 要打包資料夾或檔案到本機、或是從本機推送資料夾到 remote server 時,不用壓縮落檔、改用一行處理掉的方式比較簡潔。
-
如果方便用
rsync
還是使用rsync
比較好。
做法
tar & pipe
- 從 remote server 打包資料夾到本機:
|
|
- 反過來,從本機打包資料夾傳送到 remote server:
|
|
其中:
-
z
:代表使用gzip
處理 -
c
:create
,新增壓縮檔儲存壓縮結果 -
x
:extract
,解壓縮 -
如果要覆蓋目標位置的資料夾,要配上
--recursive-unlink
參數:
|
|
rsync
|
|
其中
-
a
:等同參數-rlptgoD
,代表「保留原有資訊、包含特殊檔案、包含連結、包含子資料夾」:-
原有資訊:諸如檔案權限、owner、group、編輯時間等
-
連結:soft link 等
-
特殊檔案:例如 named sockets and
fifos
-
子資料夾:也就是 recursive 模式
-
-
z
:傳輸前要壓縮 -
P
:等同下兩參數--progress
、--partial
,代表顯示進度、與保留部分檔案。--partial
在傳輸超大檔案時很有用,斷線或其他問題可以之後接續處理。
如果 tar 跳錯…
- 如果發現在用
tar
時有類似這樣錯誤:
|
|
這是因為 mac 在壓縮的時候會包進一些 header,結果卻讓 linux 無法辨認導致。
解決方法:
-
安裝
gnu-tar
:brew install gnu-tar
-
在
.bashrc
/.zshrc
新增環境變數:
PATH="$(brew --prefix)/opt/gnu-tar/libexec/gnubin:$PATH"
exec $SHELL
或是重新登入之後,就可以用到 gnu 版的 tar 囉!