如何在不保留目录结构的情况下tar目录?

Bro*_*and 78 unix linux gnu tar

我正在研究一个备份脚本,并想要建立一个文件目录:

tar czf ~/backup.tgz /home/username/drupal/sites/default/files
Run Code Online (Sandbox Code Playgroud)

这样可以解决这个问题,但是当我解压缩生成的文件时,它包含完整的文件结构:文件位于home/username/drupal/sites/default/files.

有没有办法排除父目录,以便生成的tar只知道最后一个目录(files)?

小智 161

使用--directory选项:

 tar czf ~/backup.tgz --directory=/home/username/drupal/sites/default files 
Run Code Online (Sandbox Code Playgroud)

  • @ChrisStryczynski请注意,`--directory`选项给出的路径不是``/ home/username/drupal/sites/default files``.它是`/ home/username/drupal/sites/default`,后跟一个位置参数,指定要编译的目录的名称,`files`. (6认同)
  • ** - C DIR**与** - directory = DIR**相同​​,将目录更改为DIR (4认同)
  • 如果我想在这里放 2 个目录怎么办? (2认同)

Mai*_*oID 45

嗨,我在进入指定目录时有一个更好的解决方案,这是不可能的(Makefile等)

tar -cjvf files.tar.bz2 -C directory/contents/to/be/compressed .
Run Code Online (Sandbox Code Playgroud)

不要忘记最后的点(.)!!

  • 最后的点有什么作用? (3认同)
  • 每个人都谈论-C选项或--directory但没有'''.最后,@ MaikolD提到它,它不起作用 - 至少在我的环境中. (3认同)
  • @BruceSun** - C**更改您的工作目录.点告诉tar要归档的目录(即当前工作目录). (2认同)
  • 如果省略末尾的点,您可能会收到警告:[tar: Cowardly refusing to create a empty archive](/sf/ask/3106610811/一个空的档案) (2认同)
  • 仍然会在tar的根目录中留一个`.`文件夹 (2认同)
  • 这不能正确地仅压缩目录“directory/contents/to/be/compressed”的内容。点导致目录“.” 要创建并且该目录包含内容。有谁有办法只压缩源目录的内容? (2认同)

Joh*_*ibb 33

cd /home/username/drupal/sites/default/files
tar czf ~/backup.tgz *
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用tar的-C选项. (19认同)
  • 建议使用cd并且容易出错,例如大脚本或makefile.下面的答案更普遍可用和正确. (8认同)
  • 这是唯一有效的选项 -C 添加 . 根文件夹,这不是我们想要的。 (3认同)

Dru*_*les 6

以nbtMaikoID 的解决方案为基础:

tar -czf destination.tar.gz -C source/directory $(ls source/directory)
Run Code Online (Sandbox Code Playgroud)

这个解决方案:

  • 包含目录中的所有文件和文件夹
  • .最终产品中不包含任何目录结构(或)
  • 不需要您更改目录。

但是,它要求提供两次目录,因此它在另一个脚本中可能最有用。如果source/directory. 根据需要调整子命令。

例如对于以下结构:

|- source
|  |- one
|  `- two
`- working
Run Code Online (Sandbox Code Playgroud)

以下命令:

|- source
|  |- one
|  `- two
`- working
Run Code Online (Sandbox Code Playgroud)

将生成destination.tar.gz其中onetwo(以及子文件/文件夹)都是第一项的情况。


小智 5

创建 tar 存档

tar czf  $sourcedir/$backup_dir.tar --directory=$sourcedir WEB-INF en
Run Code Online (Sandbox Code Playgroud)

在本地机器上解压文件

tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/
Run Code Online (Sandbox Code Playgroud)

上传到服务器

scp -r -i $privatekey $sourcedir/$backup_dir.tar $server:$deploydir/med365/
echo "File uploaded.. deployment folders"
Run Code Online (Sandbox Code Playgroud)

在服务器上解压

ssh -i $privatekey $server tar -xvf $deploydir/med365/$backup_dir.tar -C $deploydir/med365/
Run Code Online (Sandbox Code Playgroud)