如何使用 tar 创建公共基本文件夹以及如何重命名文件夹?

Mar*_*ger 9 command-line archive tar

因此,尽管我是一名计算机科学家,但我对 Ubuntu 和整个 Linux 环境还是很陌生,我想熟悉基本命令。

目前我正在处理 .tar 和 .tar.gz 文件,但在创建其中一个文件时遇到了问题。

假设我有以下文件结构:

./
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]
Run Code Online (Sandbox Code Playgroud)

使用以下命令,我目前创建了我的 tar 文件:

tar -cvf ../archive.tar a
tar -rvf ../archive.tar b
Run Code Online (Sandbox Code Playgroud)

现在我的 archive.tar 也有格式

archive.tar
|-> a
    |-> Release
        |-> [some files]
|-> b
    |-> Release
        |-> [some files]
Run Code Online (Sandbox Code Playgroud)

现在让我们来回答我的问题:鉴于上述文件结构,我如何实现以下三个存档结构:

  1. 添加公共基础文件夹

    archive.tar
    |-> baseFolder
        |-> a
            |-> Release
                |-> [some files]
        |-> b
            |-> Release
                |-> [some files]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重命名文件夹

    archive.tar
    |-> aChangedFolderName
        |-> Release
            |-> [some files]
    |-> bChangedFolderName
        |-> Release
            |-> [some files]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加公共基础文件夹并重命名文件夹

    archive.tar
    |-> baseFolder
        |-> aChangedFolderName
            |-> Release
                |-> [some files]
        |-> bChangedFolderName
            |-> Release
                |-> [some files]
    
    Run Code Online (Sandbox Code Playgroud)

对我来说,是否可以分几步完成并不重要,至少我希望我能做到。并且:#1 对我来说是最重要的。

Syl*_*eau 15

您可以使用以下命令执行 1.

tar cvf archive.tar --transform 's,^,baseFolder/,'  a b
Run Code Online (Sandbox Code Playgroud)

存档将包含:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/b/bar
Run Code Online (Sandbox Code Playgroud)

对于 2. 您可以tar使用多个--transform选项运行:

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,'  a b
Run Code Online (Sandbox Code Playgroud)

存档将包含:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 changed_b/bar
Run Code Online (Sandbox Code Playgroud)

对于 3. 你可以结合 1. 和 2. 如下:

tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,' --transform 's,^,baseFolder/,' a b
Run Code Online (Sandbox Code Playgroud)

存档将包含:

$ tar tvf archive.tar
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_a/foo
drwxrwxr-x sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/
-rw-rw-r-- sylvain/sylvain   0 2015-03-18 12:47 baseFolder/changed_b/bar
Run Code Online (Sandbox Code Playgroud)

  • @MarkusWeninger,您的链接已损坏,现在是“6.7”[修改文件和成员名称](https://www.gnu.org/software/tar/manual/html_section/tar_51.html#SEC115)。 (2认同)