我正在将我的 Ubuntu 发行版从 18.04 更新到 22.04。我将 Ubuntu 18.04 实例导出到wsl --export Ubuntu-18.04 <file.tar>
tarball,并试图弄清楚如何有效地将我需要的文件从中提取到我的新 22.04 实例中。
我知道我可以...
- 使用以下命令查看 tarball 的内容
tar -tvf <file.tar>
(t:查看内容,v:详细,f:下一个参数是文件名) tar -xvf <file.tar>
使用(x: extract)提取整个内容- 使用以下方式提取文件或文件夹
tar -xvf <file.tar> <filename_or_folder>
但是当我列出它们时,我可能有超过 1k 个文件,我认为必须有一种比列出并手动阅读所有文件更有效的方法来浏览它们。老实说,我不确定里面都有什么,但我至少想移动与 python 和 java 项目以及任何配置文件相关的文件。
我已经运行了以下命令,因此此时使用不同的方法可能会很困难:
- wsl——终止Ubuntu-18.04
- wsl——取消注册Ubuntu-18.04
答案1
首先,回答问题本身(但请参阅下文以了解可能更好的选择)
我会先做wsl --import
一个新的(临时)分配。
类似于我的其他答案,从 PowerShell 中启动并为临时分发创建一个新目录:
mkdir "$env:USERPROFILE\wsl\coniferous_ubuntu_old"
cd "$env:USERPROFILE\wsl\coniferous_ubuntu_old"
然后:
wsl --import coniferous_ubuntu_old "$env:USERPROFILE\wsl\coniferous_ubuntu_old" <path_to_tarball> --version 2
- 第一个参数
--import
是新分布的名称。 - 第二个是新发行版的目录
- 第三个是从
--export
- 最后,
--version 2
确保使用 WSL2 只是一个很好的做法。
有了这些,看看我对超级用户的回答了解有关从一个发行版访问另一个发行版中的文件的信息。仍建议使用选项 #1。
(可能的)首选替代方案
如果您没有对新的 22.04 发行版进行太多操作(使用--unregister
),我可能会删除它,然后--import
按照上面提到的方法将旧的发行版放回去。
这最终的结果将与这个答案您错过的。然后您可以从 18.04 升级到 20.04,然后从 20.04 升级到 22.04。(虽然听起来甚至有可能已经完成)。
命名发行版时不带版本号,同样会纠正您的原来的问题。
关于其他替代方案的说明
如果你解压旧发行版的 tarball里面如果你安装了新的,请记住,大小会增长很多。WSL2 发行版将生长里面可以容纳文件,但是不要(自动)收缩当文件被删除时。
答案2
“python 和 java 项目的相关文件以及任何配置文件”可能全部位于您的主目录中,但这取决于您如何使用您的系统。
配置文件应该与新版本进行比较,而不是未经检查就复制,因为程序的新版本可能需要旧版本中不存在(无效)的新设置。
您可以将档案列表写入文件并选择性地过滤输出,例如
tar -tf <file.tar> | fgrep '/home/' > <file-of-names>
或者
tar -tf <file.tar> > <file-of-names>
检查您的档案是否包含绝对路径或相对路径。您可能必须使用home/
而不是/home/
。
然后,您可以使用保留 UNIX 行尾的文本编辑器查看和修改文件名列表,仅保留您想要的文件。
使用 GNU tar(这应该是 Ubuntu(以及大多数 Linux 发行版)的默认设置),您可以指定要从文件中提取的文件,例如
tar -T <file-of-names> -xvf <file.tar>
答案3
[部分答案]
关于提取所需的文件,您可以安装 Midnight Commander(apt install mc
),这是一个简单但功能齐全的控制台文件管理器。
您可以在一个面板中打开 tar 文件,只需选择它并按 [Enter] 即可,然后在其中导航/选择文件,然后在另一个面板中选择目标并复制/移动/读取以满足您的要求。
它有在线帮助(按 [F1]),菜单命令(按 [F9])等,您可以查阅man mc
(此外,它的集成编辑器mcedit
在我看来比nano
/vi
等更用户友好,并且可以在外部调用mc
)。它非常可配置(颜色、菜单选项、宏等)。