当我tar
是单个文件时,我可以给tar
文件一个想要的名字:
$ tar -cvfj A B
Run Code Online (Sandbox Code Playgroud)
当我解压单个文件时,我也想这样做。
$ tar -xvjf A tmp
Run Code Online (Sandbox Code Playgroud)
(即提取A
到tmp
)。
我试图使用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)
这使用了-O
tar的选项
-O, --to-stdout
: 提取文件到标准输出
并将标准输出重定向到名为out
. 如果存档有多个文件,out
则将存档中的所有文件串联起来。
您可能应该bzip2
直接使用,因为在压缩期间它不会存储文件树。相反,它只会将数据存储在文件中。
由于您似乎将tar
with bzip2
compression 用作仅压缩单个文件的一种方式,因此您可能需要考虑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
)。