首页 文章

终端,du 文件和 awk

提问于
浏览
0

我正在尝试使用 bash 中的 du,file 和 awk 打印所有文件和子目录的名称,类型和大小。到目前为止我的代码是:

du -bsh * | awk '{print $2, $1}' ; file * | awk '{print $2}'

它们分开运行,因此它们分开打印。如何将其作为一个命令?

预期产量:

File1                        ASCII text                10K
Mov.mp4                ISO Media                15M
Pictures                directory                4,0K
bder.c            C source                 4,6K

2 回答

  • 0

    试试这个 :

    awk 'NR==FNR{infos[$1]=$2}NR!=FNR{print $2, infos[$2 ":"], $1}' OFS="\t" <(file *) <(du -bsh *)
    

    Awk 首先读取file *的输出。它运行NR==FNR{infos[$1]=$2}并将信息存储在关联数组infos中。

    然后 awk 读取du -bsh *的输出并执行该块NR!=FNR{print $2, infos[$2 ":"], $1}'

    阅读这个以了解有关流程替换的更多信息。

  • 0

    您可能对以下解决方案感兴趣:

    paste <(stat -c "%n %s" *) <(file -b *)
    

    或者如果你喜欢你的输出更清洁:

    paste -d'|' <(stat -c "%n|%s" *) <(file -b *) | column -s"|" -t
    

    它给你以下输出:

    File1      10240       ASCII text
    Mov.mp4    15728640    ISO Media
    Pictures   4096        directory
    bder.c     4710        C source
    

相关问题