用焦油包装

who*_*ami 4 linux tar

我正在尝试打包文件:

file1
folder2/hello
folder2/world
file3
Run Code Online (Sandbox Code Playgroud)

到 tar 文件中,以便将它们封装在自定义定义的文件夹中,因此tar -tvf archive.tar显示为:

mycustomfolder/file1
mycustomfolder/folder2/hello
mycustomfolder/folder2/world
mycustomfolder/file3
Run Code Online (Sandbox Code Playgroud)

目前要解决这个问题,我是:

  • 创建file1,folder2和的存档(x) file3
  • 创建mycustomfolder文件夹。
  • 将存档(x)解压缩到 mycustomfolder
  • mycustomfolder

我不禁认为他们可能是这样做的一步或更好的方法?

gol*_*cks 7

如果您希望存档提取到它自己的目录中——这通常会更好,因为那些不会弄乱的目录——只需创建目录,然后将内容树移动/复制到其中,这样你就可以了在你的第二个例子中:

mycustomfolder/file1
mycustomfolder/folder2/hello
mycustomfolder/folder2/world
mycustomfolder/file3
Run Code Online (Sandbox Code Playgroud)

然后tar -cvf myarchive.tar mycustomfolder。要提取,tar -xvf myarchive.tar.

如果不想先创建目录,可以转换文件名并附加目录前缀:

tar --xform="s%^%mycustomfolder/%" -cvf myarchive.tar file1 folder2 file3
Run Code Online (Sandbox Code Playgroud)

转换(请参阅man tar)使用sed语法;我使用%代替/分隔符,因为s/^/mycustomerfolder\//创建了一个名为mycustomfolder\(==奇怪的行为 IMO)的文件夹,但是s/^/mycustomfolder//(正确地)是一个“无效的转换表达式”。