仅列出文件大小、名称和符号链接

仅列出文件大小、名称和符号链接

当我使用时,ls -lah我会获得每个文件的大量信息。

如何只获取名称和文件大小?

另外,我想保留带有箭头的符号链接列表,例如

lrwxrwxrwx  1 rubo77    rubo77       4 Nov 21 01:53 test2 -> test

答案1

使用 awk 选择要打印的列

一种方法是解析 的输出ls

例子

$ ls -lah | awk '{print $9, $5}' | tail -5
.yEd 4.0K
.youtube-dl 4.0K
.zenmap 4.0K
.zshrc 32
zzzz 3.3K

顺便说一句,您可以使用 清理输出column

$ ls -lah | awk '{print $9, $5}' | column -t | tail -5
z                                                   4
.youtube-dl                                         4.0K
.zenmap                                             4.0K
.zshrc                                              32
zzzz                                                3.3K

使用 awk 选择要删除的列

如果您想删除其他列,同时保留其他列,则可以使用此awk方法来清除不需要的列。

例子

$ ls -lah | awk '{$1=$2=$3=$4=$6=$7=$8=""}1' | tail -5
    4.0K    .youtube-dl
    4    z -> zzzz
    4.0K    .zenmap
    32    .zshrc
    3.3K    zzzz

最终解决方案

OP 混合使用了上面的示例,提出了这个命令链。

$ ls -lah | awk '{print $5, $9$10$11}' | column -t | column 
...
4.0K  .gphoto              773   .rdebug_hist     4.0K  .youtube-dl
1.5K  .grip                4.0K  .rdesktop        4     z->zzzz

答案2

从手册页:

  -s, --size
          print the allocated size of each file, in blocks

因此对于人类可读的尺寸:

ls -sh

答案3

一种快速但肮脏的方法是将 的输出ls -lah与其他几个命令结合起来:

ls -lah | tr -s ' ' | cut -d' ' -f5,9-

tr -s命令将多个空格替换为单个空格,并cut -d' ' -f5,9-打印第 5 列和第 9 列(及以后)。需要9-考虑符号链接生成的额外空格分隔列。

答案4

您能得到的最接近的结果ls是使用 抑制用户和组列ls -log。如果你想更进一步,你可以解析输出。请注意,第二列(链接计数)的宽度可变。以下 shell 代码片段会注意保留列对齐,处理任意文件名(换行符除外,如果按字面传递的话),并以颜色显示输出(如果您没有运行 GNU coreutils,请删除该部分)。

if [ -t 1 ]; then color=yes; else color=no; fi
ls -h -log --color="$color" | sed 's/^[^ ][^ ]* *[^ ][^ ]* \( *[^ ][^ ]*\) ............/\1/'

相关内容