Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 仅对目录结构进行解压缩_Bash_Unix_Tar - Fatal编程技术网

Bash 仅对目录结构进行解压缩

Bash 仅对目录结构进行解压缩,bash,unix,tar,Bash,Unix,Tar,是否可以只从tar存档中提取目录结构而不提取文件 我试着用 tar tvpf archive.tar | nawk '/.*\/$/{ print $NF }' | tar -xpf archive.tar --no-recursion -T - 所有目录都显示为尾随/。因此,使用nawk,我只打印出在行尾有这些的。问题是,tar-T-不接受以行分隔的路径名。其他空白分隔文件名,因此不适用于包含空格的路径。有什么想法吗 这不是一个解决方案,可以先卸载所有文件,然后删除文件,然后将目录tar复制

是否可以只从tar存档中提取目录结构而不提取文件

我试着用

tar tvpf archive.tar | nawk '/.*\/$/{ print $NF }' | tar -xpf archive.tar --no-recursion -T -
所有目录都显示为尾随/。因此,使用nawk,我只打印出在行尾有这些的。问题是,tar-T-不接受以行分隔的路径名。其他空白分隔文件名,因此不适用于包含空格的路径。有什么想法吗


这不是一个解决方案,可以先卸载所有文件,然后删除文件,然后将目录tar复制到目标,尽管这是可能的。我想创建一个没有临时文件的解决方案。bash解决方案会很有帮助。

当然,我在不久前找到了一个类似的答案

tar-tf file.tar | grep-v'/$'| sed的/\\/g'>排除的\u文件;tar xfX file.tar排除的_文件;rm-f已排除的\u文件
第一部分查看tar,通过管道输出到grep,只获取文件名,这些文件名被发送到临时文件。然后提取tar,排除排除的文件,最后删除临时文件

编辑:添加sed以删除路径中的转义空间

更新

正如注释中所建议的,这也可以实现,无需临时文件和流程替换。干杯,沃尔特A。干净多了


tar xfX file.tar如果您可以使用一点C代码,那么您可以接受并添加一个检查

if (archive_entry_filetype(entry) != AE_IFDIR) continue;

可以使用进程替换避免临时文件:
tar xfX file.tar