当我使用时,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/'