ls 和实际文件大小而不使用“长列表格式”

ls 和实际文件大小而不使用“长列表格式”

Linuxls命令带有这些选项。

   --block-size=SIZE
          scale sizes by SIZE before printing them; e.g., '--block-size=M' prints sizes in units of  1,048,576  bytes;  see
          SIZE format below


   -l     use a long listing format

          list subdirectories recursively

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

我认为这ls -l是实际文件大小,也是ls -s --block-size=1分配用于存储文件的磁盘空间量。 (在本例中,991232 = 968x1024 = 968K。)

$ ls -s --block-size=1  summary.pdf 
991232 summary.pdf
$ ls -l summary.pdf 
-rwxrwx---. 1 chris chris 989838 May  1  2015 summary.pdf

是否可以在没有“长列表格式”中的附加信息的情况下获取文件大小(以字节为单位)?

答案1

您可以使用stat自定义格式。

stat -c'%s' summary.pdf 

将输出实际文件大小(以字节为单位)。如果您想要分配的块,请使用%b分配的块数和%B每个块的块大小(以字节为单位)。

这也适用于通配符和附加的%n文件名。有关更多格式选项,请参阅手册页。

答案2

如果您想要一种ls仅显示大小和文件名的替代格式,那么这个技巧就可以了。

ls -l | sed "s/  */ /g" | cut -d ' ' -f 5,9-

或者可能:

alias size_plus_name="sed 's/  */ /g' | cut -d ' ' -f 5,9-"
ls -l | size_plus_name

ls以这种方式与任何开关或命令行参数一起使用。不要忘记包含-l.

注意力!仅当文件名不包含任何空格时才有效。
但是,5-9-(而不是5-9) 尝试处理包含 wsp 的文件名。
(参见下面@Scott 的评论)

答案3

du将 * 替换为文件名:

du -s -B 1 *
du -s -B 1 * | cut -f 1

stat除了目录之外,它与其他相同:du将报告递归大小(例如:99999),stat将报告 4096 或块大小


find也有效:与stat

find * -maxdepth 1 -printf "%s\n"
%p     File's name.
%s     File's size in bytes.

%f     Print the basename; the file's name with any leading directories removed

https://man7.org/linux/man-pages/man1/find.1.html

相关内容