作者karasless (鸦)
看板Linux
标题[问题] tar 多不同路径档,并移除绝对路径
时间Fri Dec 8 16:05:41 2017
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://webptt.com/cn.aspx?n=bbs/Linux/M.1512720344.A.522.html
※ 编辑: karasless (59.124.127.58), 12/08/2017 16:09:16
1F:推 akaron: 用basename指令或作法二改用symlink然後用 tar -h 参数 12/08 16:17
2F:→ sasoric: 感觉做法1就可以了,切路径也有现成的工具,不会太麻烦 12/08 16:17
3F:→ karasless: 喔喔! symlink 再用 tar -h 好酷,来试试 12/08 16:25
4F:推 hijkxyzuw: 解压缩的时候用 --one-top-level 12/08 16:26
5F:→ karasless: 用的版本没 one-top-level 选项 12/08 17:39
6F:→ karasless: 还是用 方法一做掉了~ tar -rvf、basename、dirname 12/08 17:40
7F:推 lantw44: tar 的 -C 可以指定多次,类似 cd 可以重复切换工作目录 12/08 18:10
8F:→ lantw44: 可以尝试 01.txt -C /tmp 02.txt -C /home/user 03.txt 12/08 18:12
9F:→ karasless: 喔喔! 原来 -C 可以这样用啊,还想说这 -C 也太不实用~ 12/08 19:23
10F:→ karasless: 学习了! 12/08 19:24
11F:推 jamselee: 推讨论分享 12/14 06:47