13

When I use ls -lah I get lots of information for each file.

How can I get only the name and filesize?

Additionally I would like to keep the listing of symlinks with the arrow like

lrwxrwxrwx  1 rubo77    rubo77       4 Nov 21 01:53 test2 -> test
rubo77
  • 28,966

4 Answers4

9

Selecting columns to print with awk

One method would be to parse the output of ls.

Example

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

By the way, you can clean up the output using 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

Selecting columns to remove with awk

If you'd rather remove the other columns, while keeping others you can use this awk method to blank out the undesirable columns.

Example

$ 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

Eventual solution

The OP came up with this chain of commands, using a mix of the examples from above.

$ 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
slm
  • 369,824
5

From the man page:

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

So for human-readable sizes:

ls -sh
ssch
  • 241
4

One quick and dirty way is to combine the output of ls -lah with a couple of other commands:

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

The tr -s command replaces multiple spaces with single spaces, and the cut -d' ' -f5,9- prints columns 5 and 9 (and beyond). The 9- is required to account for additional space-separated columns produced by symlinks.

Greg Hewgill
  • 7,053
  • 2
  • 32
  • 34
1

The closest you can get with ls only is to suppress the user and group columns with ls -log. If you want to go further, you can parse the output. Beware that the second column (the link count) has variable width. The following shell snippet takes care to preserve column alignment, copes with arbitrary file names (except newlines if they're passed literally), and displays the output in color (remove that part if you aren't running GNU coreutils).

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