首页 > 解决方案 > 从 tar 归档 Linux 中提取前 10 个最大的文件

问题描述

我只想使用 Linux 终端从 tar 存档中提取前 10 个最大的文件。我可以插入要提取的文件的路径,但我想知道是否可以使用命令对文件进行排序,这样我只能提取其中最大的 10 个。

tar -xvf myfile.tar | sort -n -r | head -n 2 > otherfile(这样我只成功保存了文件名,而不是文件名..)

你能帮忙或建议吗?

标签: linuxfileextracttar

解决方案


您可以使用以下命令实际仅从 tar 中提取前 10 个最大的文件。

files=$(tar -tvf <tar-name> |sort -n -r |egrep -v "^d"|head | awk '{print $9}')
tar -xvf <tar-name> $files

让我解释一下它到底在做什么:

此命令会将存档内容列出到标准输出。

tar -tvf <tar-name>

这将对内容进行排序。

tar -tvf <tar-name> |sort -n -r

如果有的话,这将排除目录:

tar -tvf <tar-name> |sort -n -r |egrep -v "^d"

这将打印前 10 个文件(head 默认打印 10 个):

tar -tvf <tar-name> |sort -n -r |egrep -v "^d"|head

这将只获取文件名:

tar -tvf <tar-name> |sort -n -r |egrep -v "^d"|head | awk '{print $9}'

获得文件名后,我们将其保存在 files 变量中,然后我们可以使用以下命令从 tarball 中获取确切的文件:

tar -xvf <tar-name> $files

推荐阅读