虽然我是一名计算机科学家,但我对 Ubuntu 和整个 Linux 环境还很陌生,我想熟悉基本的命令。
目前我正在处理 .tar 和 .tar.gz 文件,但在创建其中一个文件时遇到了问题。
假设我有以下文件结构:
./
|-> a
|-> Release
|-> [some files]
|-> b
|-> Release
|-> [some files]
我目前使用以下命令创建我的 tar 文件:
tar -cvf ../archive.tar a
tar -rvf ../archive.tar b
现在我的 archive.tar 也具有格式
archive.tar
|-> a
|-> Release
|-> [some files]
|-> b
|-> Release
|-> [some files]
现在让我们来回答我的问题:根据上述文件结构,如何实现以下三个档案结构:
添加通用基础文件夹
archive.tar |-> baseFolder |-> a |-> Release |-> [some files] |-> b |-> Release |-> [some files]
重命名文件夹
archive.tar |-> aChangedFolderName |-> Release |-> [some files] |-> bChangedFolderName |-> Release |-> [some files]
添加通用基础文件夹并重命名文件夹
archive.tar |-> baseFolder |-> aChangedFolderName |-> Release |-> [some files] |-> bChangedFolderName |-> Release |-> [some files]
对我来说,即使它可以分多个步骤完成也没关系,至少我希望我能做到。而且:#1 对我来说是最重要的。
答案1
您可以使用以下命令执行1.:
tar cvf archive.tar --transform 's,^,baseFolder/,' a b
该档案将包含:
$ 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
对于 2.,您可以tar
使用多个--transform
选项运行:
tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,' a b
该档案将包含:
$ 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
对于 3.,您可以将 1. 和 2. 组合如下:
tar cvf archive.tar --transform 's,^a,changed_a,' --transform 's,^b,changed_b,' --transform 's,^,baseFolder/,' a b
该档案将包含:
$ 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