将一系列不带“。”的文件/目录解压缩。作为父目录?

时间:2019-02-21 19:06:29

标签: centos7 tar gnome

我正在使用以下命令生成.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存档管理器查看存档时,它表明所有文件/文件夹实际上都在名为“”的子目录中。像这样:

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

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

1 个答案:

答案 0 :(得分:1)

在您的命令中,您将目录称为.,该目录链接到您所在的目录。.目录是真实目录,它恰好具有与.本身的目录。例如,当您使用./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的东西,实际上它使您可以遍历文件结构。