tar 多不同路徑檔,並移除絕對路徑 - Linux

Table of Contents


Linux 板的棒油大家好。

在寫 script 中,取得了想要處理的檔案清單:
./01.txt
/tmp/02.txt
/home/user/03.txt
...

想要將其打包壓成 tar 檔,
不過若是直接下指令如下的話:
tar -zcvf test.tar.gz ./01.txt /tmp/02.txt /home/user/03.txt

則保存的資料夾路徑也會一起被 copy(根路徑被移除)
tar -ztvf test.tar.gz
01.txt
tmp/02.txt
home/user/03.txt

--

而希望的是能得到的結果為:
tar -ztvf test.tar.gz
01.txt
02.txt
03.txt

備分的原始 tar 完後,將之移除。

--

查網路上,多是在同一資料夾下處理,
則會用 tar 的 -C 參數切到該路徑做事。

而以此 需求來說,因要處理的檔案是散在多個不同路徑下,看來是不適用此法。

--

有想到幾個較為迂迴的做法:

做法-1:
再 parse 每個 檔案名,切出其 檔案路徑 及 檔案。
再一個個用 tar -C 去 add 每個檔案到 test.tar.gz 中。

做法-2:
把所有檔案先 copy 到一個 temp 資料夾下,tar 完後再把 temp 資料夾移除。
做法簡單,不過如果處理的檔案是好幾 GB 的話,感覺效能會非常差…

--

不過感覺應該是個會有很多人都會遇到,會有需要的功能,
所以想上來請教,是否有好方法能夠做到呢?

感激不盡~~

--

All Comments

Susan avatarSusan2017-12-12
用basename指令或作法二改用symlink然後用 tar -h 參數
Margaret avatarMargaret2017-12-16
感覺做法1就可以了,切路徑也有現成的工具,不會太麻煩
Robert avatarRobert2017-12-20
喔喔! symlink 再用 tar -h 好酷,來試試
Valerie avatarValerie2017-12-25
解壓縮的時候用 --one-top-level
Suhail Hany avatarSuhail Hany2017-12-26
用的版本沒 one-top-level 選項
Linda avatarLinda2017-12-29
還是用 方法一做掉了~ tar -rvf、basename、dirname
Eden avatarEden2017-12-31
tar 的 -C 可以指定多次,類似 cd 可以重複切換工作目錄
Ophelia avatarOphelia2018-01-02
可以嘗試 01.txt -C /tmp 02.txt -C /home/user 03.txt
Mia avatarMia2018-01-03
喔喔! 原來 -C 可以這樣用啊,還想說這 -C 也太不實用~
Mary avatarMary2018-01-05
學習了!
Victoria avatarVictoria2018-01-10
推討論分享