如何在bash中收集和格式化目录内容的文件名,大小和扩展名?

时间:2017-10-19 15:32:04

标签: bash

我希望输出按大小,每个文件的类型和没有扩展名的文件名格式化的内容列表。

我尝试过使用ls grep和awk,但无济于事。我不确定如何做到这一点,有人可以帮助我吗?

我正在寻找输出显示如下;

   Filename        FileSize      Extension
   Filename        FileSize      Extension
   Filename        FileSize      Extension
   Filename        FileSize      Extension

等等。

1 个答案:

答案 0 :(得分:0)

这里不需要ls(事实上,有充分理由不使用它;请参阅Why you shouldn't parse the output of ls)。

作为原生bash:

#!/usr/bin/env bash

for file in *; do                 # iterate over contents of current directory
  [[ -f "$file" ]] || continue    # skip things that aren't files
  size=$(wc -c <"$file")          # collect size
  # ...and actually format and print metadata
  printf '%20q %20s %q\n' "${file%.*}" "$size" "${file##*.}"
done

在这里,%q用于确保具有非打印组件的偶数名称被明确地格式化(例如,您可以区分具有空格的名称和带有制表符的名称)。