如何有效/正确地将数据从 tarball 提取到新的 Ubuntu 发行版中?

con*_*ous 4 upgrade command-line tar software-installation windows-subsystem-for-linux

我正在将我的 Ubuntu 发行版从 18.04 更新到 22.04。我将 Ubuntu 18.04 实例导出wsl --export Ubuntu-18.04 <file.tar>到 tarball,并尝试找出如何有效地将我需要的文件从中提取到我的新 22.04 实例中。

我知道我可以...

  • tar -tvf <file.tar>使用(t:查看内容,v:详细,f:下一个参数是文件名)查看 tarball 的内容
  • tar -xvf <file.tar>使用(x: extract)提取整个内容
  • 提取文件或文件夹tar -xvf <file.tar> <filename_or_folder>

但当我列出它们时,我可能有超过 1k 个文件,我认为必须有一种比列出并手动阅读所有文件更有效的方法来浏览它们。老实说,我不确定里面有什么,但我至少想移动 python 和 java 项目以及任何配置文件的相关文件。

我已经运行了以下命令,因此此时使用不同的方法可能会很困难:

  • wsl --终止 Ubuntu-18.04
  • wsl --取消注册 Ubuntu-18.04

Not*_*1ds 5

首先,回答问题本身(但请参阅下面的潜在更好的选择)

我会首先做wsl --import一个新的(临时)发行版。

与我的其他答案类似,在 PowerShell 中启动并为临时分发创建一个新目录:

mkdir "$env:USERPROFILE\wsl\coniferous_ubuntu_old"
cd "$env:USERPROFILE\wsl\coniferous_ubuntu_old"
Run Code Online (Sandbox Code Playgroud)

然后:

wsl --import coniferous_ubuntu_old "$env:USERPROFILE\wsl\coniferous_ubuntu_old" <path_to_tarball> --version 2
Run Code Online (Sandbox Code Playgroud)
  • 第一个参数--import是新发行版的名称。
  • 第二个是新发行版的目录
  • 第三个是从以下文件创建的 tarball--export
  • 最后,--version 2这只是确保使用 WSL2 的一个好习惯。

完成此操作后,请参阅我在超级用户上的回答,了解有关从一个发行版访问另一个发行版中的文件的信息。选项 #1 仍然是首选。

(可能的)首选替代方案

如果您没有对新的 22.04 发行版进行太多操作(使用--unregister),我可能会删除您的新发行版,然后--import将旧发行版重新放回,如上所述。

这最终会产生与您错过的答案相同的最终结果。然后,您可以从 18.04 升级到 20.04,然后从 20.04 升级到 22.04。(尽管听起来有可能已经完成了,甚至)。

再次,在没有版本号的情况下命名发行版将纠正您原来的问题。

关于其他替代方案的说明

如果您将旧发行版的 tarball 提取到新发行版,请记住,大小会增加很多。WSL2 发行版将向内增长以容纳内部文件,但当文件被删除时不会(自动)收缩