给一系列 files/directories 加上“.”作为父目录?

Tarring a series of files/directories without "." as a parent directory?

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

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

/lots/of/subdirectories/files 包含类似于以下内容的目录结构:

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

以此类推

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

使用我指定的命令,当我使用 Ark 或 Archive Mounter 查看存档时,所有内容 显示 完全按照我想要的方式构建。但是,当我使用 GNOME 存档管理器查看存档时,它显示所有 files/folders 实际上都在一个名为“.”的子目录中。像这样:

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

有什么办法可以去掉“.”子目录?

在您的命令中调用目录 .,它链接到您所在的目录。. 目录是一个真正的目录,它恰好具有相同的限制作为 . 自身所在的目录。例如,当您 运行 带有 ./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。你想要的是获取目录中的所有文件,而不是将它们视为 ./ 的子目录。为此,您需要使用通配符或正则表达式,字符 *,它匹配所有内容。

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 的东西,它实际上可以让你遍历文件结构。