centos7 - 对一系列不带“.”的文件/目录进行焦油处理 作为父目录?
问题描述
我正在使用以下命令生成一个 .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/
有什么办法可以摆脱“。” 子目录?
解决方案
在您的命令中,您调用 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
在文件结构上运行类似的东西,它实际上可以让你遍历文件结构。
推荐阅读
- javascript - 当我切换到另一个选项卡时,有什么方法可以让 javascript setTimeout 暂停?
- python - 我应该如何在 Abaqus 脚本中更改 faces.findAt() 的输入?
- android - 如何处理嵌套在内部堆栈的抽屉导航器中的Android后退按钮
- java - Apache Http 客户端执行请求而不发送封闭实体
- algorithm - 3D网格方向检测
- c++ - 是否可以检查抽象类是否可复制构造而忽略抽象性?
- r - 如何重命名 cbind/aggregate 中的变量?
- python-3.x - 在 matplotlib.text 中填充文本
- swift - 如何为按钮添加遮罩以使隐藏区域不可点击?
- postgresql - 我正在尝试使用 spark 从 postgres 中删除数据,但无法删除相同的代码适用于 select 语句