首先,这不是这个的重复: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
按时间排序