解压“ tar”,但更改目录名称以提取到


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

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

Answers:


35

使用-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会自动为您删除该第一级文件夹。设置的数字越大,嵌套文件夹的删除越深。


我读了man tar。没有发现--strip-components。好人
费利佩·阿尔瓦雷斯

1
tar-1.14使用--strip-path,tar-1.14.90 +使用--strip-components。也许这里有问题?
Mikhail Moskalev 2011年

如果给出示例而不是开关,我会对此表示赞同,因为在线手册指出,3个参数样式引起了混乱。
Iain 2014年

我认为,忘记了tar -xz上的-f。我失败了。我以为我一直在无故使用它……
约翰·卡雷尔18/12/4

17

您也可以使用该--transform选项以提高灵活性。它接受任何sed替换操作。

例如,这是我将Linux压缩文件解压缩到新目录的方式,因此我可以应用补丁程序:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.