解压“tar”,但更改要提取的目录名称

解压“tar”,但更改要提取的目录名称
tar -tf filename.tar
folder1/file
folder1/name
[...]

我想提取文件姓名到,文件夹2。这可以一行完成吗?

答案1

使用-C--strip-components(参见man tar)。

例子:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

解释:

-C标志假定目录已经存在,因此 tar 文件的内容可以扩展到其中。因此mkdir FOLDER

--strip-components当 tar 文件自然地将自身扩展到文件夹(比如 github 中的示例文件夹)时,将使用此标志repo-name-master。当然,您不需要此处生成的第一级文件夹,因此--strip-components设置为1将自动为您删除第一个文件夹。设置的数字越大,删除的嵌套文件夹就越多。

答案2

您还可以使用该--transform选项获得更多灵活性。它接受任何 sed 替换操作。

例如,这是我将 Linux tarball 提取到新目录以便应用补丁的方法:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'

相关内容