linux - 如何从绝对路径和包文件创建 tar 存档,就好像它们是相对的一样?

标签 linux path directory tar subdirectory

在 Linux 上,我试图从不同的目录创建一个 .tar.gz 存档,也就是说,我有一个将从不同目录执行的 bash 脚本。该脚本将打包文件夹,我将给出文件夹的绝对目录 /home/user1/Documents/folder1 但是当它打包 tar 文件时,它将整个绝对目录放入存档中,而我只想要 folder1 中的相关文件。

例如:

tar czf/home/user1/Documents/folder1.tar.gz/home/user1/Documents/folder1

这将创建一个存档,但第一个文件夹将在 home 中,然后在 user1 内部、文档内部和 folder1 内部,当然没有来自其他分支的其他子文件夹。

控制台也给出了这个错误:

tar: Removing leading `/' from member names

我希望它被打包,就好像我会从同一个文件夹执行命令一样,所以存档中的唯一文件夹应该是 folder1,并且在里面它有自己的子文件夹。

所以里面的存档应该看起来就像我从 folder1 所在的同一目录执行这段代码一样:

tar czf folder1.tar.gz folder1

最佳答案

您可以在执行任何操作之前使用-C 选项更改目录:

tar czf /home/user1/Documents/folder1.tar.gz -C /home/user1/Documents folder1

现在,您的存档内容将如下所示:

$ tar tf /home/user1/Documents/folder1.tar.gz 
folder1/
folder1/file1

顺便说一句,您收到的消息不是错误。它是 tar 告诉您它使存档中的路径相对,以避免覆盖文件,这在使用绝对路径解压缩存档时很容易发生。您可以使用 -P 关闭前导斜线删除,但您通常不希望这样做。

关于linux - 如何从绝对路径和包文件创建 tar 存档,就好像它们是相对的一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604954/

相关文章:

c++ - 为什么第一次调用 readline() 会减慢对 fnmatch() 的所有后续调用?

Java/Tesseract-OCR : Unsatisfied LinkError libtesseract302

batch-file - FFMPEG - 我正在尝试使用 ffmpeg 选择文件夹中的所有 .mp4 文件,并以文件名作为图像名称对其进行截图

ruby-on-rails - Rails 寻找错误的 bundler 路径

python - 如何启动新终端来跟踪从 Django 触发的 shell 脚本?

C++ - 如何获取特定用户的桌面路径

linux - 命令行在哪里搜索可执行程序

matlab - 如何从 Matlab 打开默认文件管理器中的目录?

java - 如何使用java或groovy计算目录上的md5校验和?

java - 如何在hadoop中配置hdfs