将单个文件解压为所需名称

War*_*key 4 tar

当我tar是单个文件时,我可以给tar文件一个想要的名字:

$ tar -cvfj A B
Run Code Online (Sandbox Code Playgroud)

当我解压单个文件时,我也想这样做。

$ tar -xvjf A tmp
Run Code Online (Sandbox Code Playgroud)

(即提取Atmp)。

我试图使用mv以下方法执行此操作:

$ tar -xvjf $1 | mv $1 tmp
Run Code Online (Sandbox Code Playgroud)

那没有用。$1可以是任意名称,但tar文件将始终是单个文件,没有文件夹(这是有保证的)。

小智 7

这是一种解决方案:

tar -xjOf my.tar > out
Run Code Online (Sandbox Code Playgroud)

这使用了-Otar的选项

-O, --to-stdout: 提取文件到标准输出

并将标准输出重定向到名为out. 如果存档有多个文件,out则将存档中的所有文件串联起来。

您可能应该bzip2直接使用,因为在压缩期间它不会存储文件树。相反,它只会将数据存储在文件中。

  • 这种方法的警告是您不保留元数据,如权限和符号链接。 (3认同)

Kus*_*nda 7

由于您似乎将tarwith bzip2compression 用作仅压缩单个文件的一种方式,因此您可能需要考虑bzip2直接使用:

压缩文件(创建filename.bz2、删除filename):

bzip2 filename
Run Code Online (Sandbox Code Playgroud)

解压文件(创建filename、删除filename.bz2):

bunzip2 filename.bz2
Run Code Online (Sandbox Code Playgroud)

压缩为特定文件名(创建newfilename.bz2,保持filename):

bzip2 -c filename >newfilename.bz2
Run Code Online (Sandbox Code Playgroud)

解压到一个特定的文件名(创建newfilename,保持filename.bz2):

bunzip2 -c filename.bz2 >newfilename
Run Code Online (Sandbox Code Playgroud)

另请参阅bzip2系统手册( man bzip2)。