[問題] tar 多不同路徑檔,並移除絕對路徑

看板Linux作者 (鴉)時間6年前 (2017/12/08 16:05), 6年前編輯推噓4(407)
留言11則, 6人參與, 6年前最新討論串1/1
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 的話,感覺效能會非常差… -- 不過感覺應該是個會有很多人都會遇到,會有需要的功能, 所以想上來請教,是否有好方法能夠做到呢? 感激不盡~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.127.58 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1512720344.A.522.html ※ 編輯: karasless (59.124.127.58), 12/08/2017 16:09:16

12/08 16:17, 6年前 , 1F
用basename指令或作法二改用symlink然後用 tar -h 參數
12/08 16:17, 1F

12/08 16:17, 6年前 , 2F
感覺做法1就可以了,切路徑也有現成的工具,不會太麻煩
12/08 16:17, 2F

12/08 16:25, 6年前 , 3F
喔喔! symlink 再用 tar -h 好酷,來試試
12/08 16:25, 3F

12/08 16:26, 6年前 , 4F
解壓縮的時候用 --one-top-level
12/08 16:26, 4F

12/08 17:39, 6年前 , 5F
用的版本沒 one-top-level 選項
12/08 17:39, 5F

12/08 17:40, 6年前 , 6F
還是用 方法一做掉了~ tar -rvf、basename、dirname
12/08 17:40, 6F

12/08 18:10, 6年前 , 7F
tar 的 -C 可以指定多次,類似 cd 可以重複切換工作目錄
12/08 18:10, 7F

12/08 18:12, 6年前 , 8F
可以嘗試 01.txt -C /tmp 02.txt -C /home/user 03.txt
12/08 18:12, 8F

12/08 19:23, 6年前 , 9F
喔喔! 原來 -C 可以這樣用啊,還想說這 -C 也太不實用~
12/08 19:23, 9F

12/08 19:24, 6年前 , 10F
學習了!
12/08 19:24, 10F

12/14 06:47, 6年前 , 11F
推討論分享
12/14 06:47, 11F
文章代碼(AID): #1QAaVOKY (Linux)