解压 'tar' 但更改目录名称以提取到

Fel*_*rez 35 tar

tar -tf filename.tar
folder1/file
folder1/name
[...]
Run Code Online (Sandbox Code Playgroud)

我想将文件名称提取到folder2。这可以作为单线完成吗?

Mar*_*ian 46

使用-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
Run Code Online (Sandbox Code Playgroud)

解释:

-C标志假定一个目录已经就位,因此可以将 tar 文件的内容扩展到其中。因此mkdir FOLDER.

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


小智 22

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

例如,这是我将 Linux tarball 解压缩到新目录的方式,以便我可以应用补丁:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
Run Code Online (Sandbox Code Playgroud)