我正在使用以下命令生成.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/
有什么办法可以摆脱“。”子目录?
答案 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
的东西,实际上它使您可以遍历文件结构。