首页 > 解决方案 > 对一系列不带“.”的文件/目录进行焦油处理 作为父目录?

问题描述

我正在使用以下命令生成一个 .tar.gz 文件。

tar cfhpz archive.tar.gz -C /lots/of/subdirectories/files .

/lots/of/subdirectories/files 包含一个目录结构,类似于:

+
|-- bin/
|-- dist/
|-- lib/

等等。

我运行此命令的最终目标是拥有一个包含与 /lots/of/subdirectories/files 中的目录结构完全相同的目录结构的 .tar.gz - 没有额外的父目录。

使用我指定的命令,当我使用 Ark 或 Archive Mounter 查看存档时,一切似乎都按照我想要的方式构建。但是,当我使用 GNOME 存档管理器查看存档时,它显示所有文件/文件夹实际上都位于名为“.”的子目录中。像这样:

+
|-- .
    |-- bin/
    |-- dist/
    |-- lib/

有什么办法可以摆脱“。” 子目录?

标签: centos7targnome

解决方案


在您的命令中,您调用 directory .,它链接到您所在的目录。该.目录是一个真实的目录,它恰好与.它自己所在的目录具有相同的限制。例如,当运行脚本时./script.sh,您所做的与从文件系统的其他位置发出命令一样/path/to/script.sh./当您从本地目录运行可执行文件时,使用 Bash 中的约定。或者,您可以运行脚本bash script.sh

所以,当你跑

tar cfhpz archive.tar.gz -C /lots/of/subdirectories/files .

它解析为./all-the-stuff-in-the-directory。您想要的是获取目录中的所有文件,而不是将它们视为./. 为此,您需要使用通配符或正则表达式charter *,它匹配所有内容。

tar cfhpz archive.tar.gz -C /lots/of/subdirectories/files *

例如,如果我运行echo ~/Documents/*

/home/seamus/Documents/2013 /home/seamus/Documents/2014 /home/seamus/Documents/2015 /home/seamus/Documents/2016 /home/seamus/Documents/2017 /home/seamus/Documents/2018 /home/seamus/Documents/2019

我们得到回显的是目录的所有内容,没有./../或其他隐藏文件。

KDE Ark 和 Gnome 文件存档管理器的不同之处在于,Ark 做出的推断./可能只是重定向到包含的文件夹。这与 Grome 不同,它可能ls在文件结构上运行类似的东西,它实际上可以让你遍历文件结构。


推荐阅读