受人尊敬的项目会发布包含单个目录的 tar 存档,例如zyrgus-3.18.tar.gz
包含一个zyrgus-3.18
文件夹,该文件夹又包含src
、build
、dist
等。
但有些朋克项目把一切都放在根源上:'-( 这会导致一团糟取消存档时。每次手动创建文件夹是一件痛苦的事情,而且大多数时候都是不必要的。
- 有没有一种超快速的方法来判断 .tar 或 .tar.gz 文件的根目录是否包含多个目录?即使对于一个大的档案。
- 或者更好的是,是否有一种工具可以在这种情况下创建一个目录(不带扩展名的存档名称)并将所有内容放入其中?
答案1
巡警处理不同类型的存档并在存档包含多个文件的情况下创建子目录,以防止提取的文件使工作目录混乱。
提取存档
patool extract archive.tar
要获取支持的格式列表,请使用patool formats
。
答案2
你可以做类似的事情
tar tf thefile.tar | cut -d/ -f1 | sort -u
查看 tar 有哪些顶级条目;通过管道wc -l
检查是否有多个。请注意,在某些情况下这会失败,例如,如果 tar 包含以下形式的文件路径somedir/whatever
并且还./somedir/whatever
(或者更疯狂的东西);不过,这应该不常见。
由于 ,这将在输出任何内容之前读取整个 tar 文件,sort
尽管它应该比实际提取更快,因为它只是一个顺序读取并且可以跳过大文件。
如果您以交互方式执行此操作并且文件可能很大,则如果它打印出不止一件事,您可以更改sort -u
为uniq
和Control+ 。C
答案3
你可以做:
pax <some.tar
...列出tar
文件的内容。
如果你想知道它有多深,你可以这样做:
pax <some.tar | tr -dc /\\n | sort -r | head -n1
您可以使用以下命令明确禁止提取时的爆炸:
mkdir some.tar
pax -'rs|^|some.tar/|' <some.tar
答案4
aunpack archive.tar
是我用的。
美好旧时光的一部分一个工具包裹。联机帮助页:https://linux.die.net/man/1/atool