Bash 仅对目录结构进行解压缩
是否可以只从tar存档中提取目录结构而不提取文件 我试着用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 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