📜  arch linux 按大小对包进行排序 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:59:22.327000             🧑  作者: Mango

Arch Linux 按大小对包进行排序 - Shell-Bash

在 Arch Linux 上,我们可以使用 pacman 包管理器来安装和管理软件包。但是有时我们可能需要查看已安装的软件包并根据大小进行排序。这个问题可以通过在终端中使用 pacmangrepawk 命令来解决。

下面是一个 Shell-Bash 脚本的示例:

#!/bin/bash

# 获取已安装的软件包列表及其大小
packages=$(pacman -Qi | grep "^Name" | awk '{print $3}')
sizes=$(pacman -Qi | grep "^Installed Size" | awk '{print $4}' | sed 's/[^0-9]//g')

# 创建一个关联数组,将软件包名称和其大小对应起来
declare -A package_sizes
for ((i=0; i<${#packages[@]}; i++)); do
    package_sizes[${packages[$i]}]=${sizes[$i]}
done

# 对软件包按大小进行排序并输出结果
IFS=$'\n'
sorted=($(echo "${sizes[*]}" | sort -rn))
unset IFS

echo "| 软件包名称  | 大小 (KB) |"
echo "|--------------|-----------|"

for package_size in "${sorted[@]}"; do
    for package in "${!package_sizes[@]}"; do
        if [[ ${package_sizes[$package]} == $package_size ]]; then
            printf "| %-12s | %10s |\n" "$package" "$package_size"
            unset package_sizes[$package]
        fi
    done
done

下面对脚本中的主要部分进行简要解释:

  1. 获取已安装的软件包列表及其大小:

    packages=$(pacman -Qi | grep "^Name" | awk '{print $3}')
    sizes=$(pacman -Qi | grep "^Installed Size" | awk '{print $4}' | sed 's/[^0-9]//g')
    

    这里使用 pacman -Qi 命令获取已安装的软件包信息,并使用 grepawk 命令从输出中提取软件包名称和大小信息。sed 命令用于在大小信息中删除非数字字符。

  2. 创建一个关联数组,将软件包名称和其大小对应起来:

    declare -A package_sizes
    for ((i=0; i<${#packages[@]}; i++)); do
        package_sizes[${packages[$i]}]=${sizes[$i]}
    done
    

    这里使用 declare -A 命令创建一个关联数组,并使用循环将软件包名称和大小对应起来。

  3. 对软件包按大小进行排序并输出结果:

    IFS=$'\n'
    sorted=($(echo "${sizes[*]}" | sort -rn))
    unset IFS
    
    echo "| 软件包名称  | 大小 (KB) |"
    echo "|--------------|-----------|"
    
    for package_size in "${sorted[@]}"; do
        for package in "${!package_sizes[@]}"; do
            if [[ ${package_sizes[$package]} == $package_size ]]; then
                printf "| %-12s | %10s |\n" "$package" "$package_size"
                unset package_sizes[$package]
            fi
        done
    done
    

    这里使用 sort 命令对软件包大小进行排序,并通过循环输出按大小排序的软件包列表。

脚本输出的示例:

| 软件包名称 | 大小 (KB) | |--------------|-----------| | linux-headers | 2496988 | | chromium | 2401756 | | libreoffice-common | 1880740 | | linux | 1674428 | | glibc | 1065796 | | gcc | 981100 | | mesa | 531836 | | nano | 526960 | | vim | 332620 | | coreutils | 294000 | | bash | 287144 | | findutils | 286912 | | gawk | 285308 | | sed | 278304 | | grep | 274084 | | pacman | 270096 | | perl | 268912 | | texinfo | 266088 | | tar | 257584 | | xz | 253716 | | gzip | 242092 | | automake | 219356 | | autoconf | 218824 | | make | 207296 | | pkg-config | 142044 |

以上就是一个简单的脚本示例,可以通过这个脚本实现根据软件包大小对所有已安装软件包进行排序并输出。