ls 仅显示目录/文件名和大小

ls 仅显示目录/文件名和大小

首先,这不是这个的重复:Linux ls 仅显示文件名日期和大小

因为我想另外打印实际的目录名称。

我一直使用这个命令:

ls -l | awk '{print $5, $9}'

获取每个文件的大小和名称。

但现在,我需要另外打印文件目录。就像如果当前目录是/path/to/somewhere,我想要:

somewhere/file 1234
somewhere/other-file 4567

而不仅仅是

file 1234
other-file 4567

那可能吗?

答案1

您的意思是这样,只是将当前目录添加到每个文件名之前?

ls -l | awk '{printf("%s %s/%s\n", $5, ENVIRON["PWD"], $9); }'

或者是其他东西?


好的,显然你想要的是

$ cd /some/path/to/somewhere
$ <insert command here>
somewhere/file1 size1
somewhere/file2 size2
...

正确的?

如果是这样,您需要的更改(假设是 POSIX shell)如下:

ls -l | DIR=${PWD##*/} awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'

反而。

在 中tcsh,正如您的Illegal variable name错误表明您正在使用的那样,您将使用:

ls -l | env DIR=$PWD:t:q awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'

反而。


如果它仍然不起作用,请在你的问题中描述你的平台、shell、awk 版本等 - 评论线程变得很长,我已经没有猜测了:-)

答案2

本着“不解析 ls 输出”的精神,为什么不使用find?:

find . -mindepth 1 -maxdepth 1 -printf '%p\t%s\n'

(此处假设find-printf扩展名为 GNU)。

如果您需要文件的完整路径,请替换."$PWD"(或者$PWD:q如果使用)。tcsh请注意,与 相反ls,它包含隐藏文件并且不对文件列表进行排序。

答案3

$ du -b

对于人类可读的大小:

$ du -bh

答案4

我认为你只需要ls

ls -sh1 /var/log/mysql/*
0 /var/log/mysql/mysqld.log
4.0K /var/log/mysql/mysqld.log-20140718
4.0K /var/log/mysql/mysqld.log-20140827
4.0K /var/log/mysql/mysqld.log-20140829
  • -s每个文件的打印大小
  • -h打印人类可读的尺寸
  • -1在新行中打印每个文件
  • *通配符通配符“启用”打印完整路径
  • 可选:-S按大小排序
  • 可选:-t按时间排序

相关内容