Linux 文件按照大小排序

在linux中显示文件大小的时候,通常的做法是使用“ls -l”,显示的大小是文件的字节大小。
但是,如果文件比较大的话,显示起来不是特别易读,这个时候,可以使用“ls -lh”,就可以使用比较接近文件大小的单位显示文件的大小,如下:

  1. [billing_dx@bmcs1 bin]$ ls -lh  
  2. total 565M  
  3. -rwxr-xr-x 1 billing_dx BILLING 1.1M Mar 10 18:56 AcctMgrService  
  4. -rw-r--r-- 1 billing_dx BILLING  364 Mar 10 18:59 AcctMgrService.conf  
  5. -rw------- 1 billing_dx BILLING  11G Mar 13 18:37 core.22836  
  6. -rw-r--r-- 1 billing_dx BILLING  410 Mar 13 17:38 dll_info.conf  
  7. -rwxr-xr-x 1 billing_dx BILLING   39 Mar 10 18:57 go  


参考:

3 Ways to Sort files by Size in Linux - howtouselinux

使用“-h”参数时,会根据文件的大小选择显示的单位是“K”、“M”还是“G”。如果希望指定显示的单位,可以使用“--block-size”参数,如下:

[billing_dx@bmcs1 bin]$ ls -l  

total 577724  

-rwxr-xr-x 1 billing_dx BILLING     1103862 Mar 10 18:56 AcctMgrService  

-rw-r--r-- 1 billing_dx BILLING         364 Mar 10 18:59 AcctMgrService.conf  

-rw------- 1 billing_dx BILLING 10947788800 Mar 13 18:37 core.22836  

-rw-r--r-- 1 billing_dx BILLING         410 Mar 13 17:38 dll_info.conf  

-rwxr-xr-x 1 billing_dx BILLING          39 Mar 10 18:57 go  

  

[billing_dx@bmcs1 bin]$ ls -l --block-size=k   

total 577724K  

-rwxr-xr-x 1 billing_dx BILLING     1078K Mar 10 18:56 AcctMgrService  

-rw-r--r-- 1 billing_dx BILLING        1K Mar 10 18:59 AcctMgrService.conf  

-rw------- 1 billing_dx BILLING 10691200K Mar 13 18:37 core.22836  

-rw-r--r-- 1 billing_dx BILLING        1K Mar 13 17:38 dll_info.conf  

-rwxr-xr-x 1 billing_dx BILLING        1K Mar 10 18:57 go  

  

[billing_dx@bmcs1 bin]$ ls -l --block-size=m  

total 565M  

-rwxr-xr-x 1 billing_dx BILLING     2M Mar 10 18:56 AcctMgrService  

-rw-r--r-- 1 billing_dx BILLING     1M Mar 10 18:59 AcctMgrService.conf  

-rw------- 1 billing_dx BILLING 10441M Mar 13 18:37 core.22836  

-rw-r--r-- 1 billing_dx BILLING     1M Mar 13 17:38 dll_info.conf  

-rwxr-xr-x 1 billing_dx BILLING     1M Mar 10 18:57 go  

  

[billing_dx@bmcs1 bin]$ ls -l --block-size=g  

total 1G  

-rwxr-xr-x 1 billing_dx BILLING  1G Mar 10 18:56 AcctMgrService  

-rw-r--r-- 1 billing_dx BILLING  1G Mar 10 18:59 AcctMgrService.conf  

-rw------- 1 billing_dx BILLING 11G Mar 13 18:37 core.22836  

-rw-r--r-- 1 billing_dx BILLING  1G Mar 13 17:38 dll_info.conf  

-rwxr-xr-x 1 billing_dx BILLING  1G Mar 10 18:57 go  




同哦过对比可以看到,使用  不同的单位显示的时候,使用的是进一法,所以一个1k的东西,使用G为单位显示的是,会显示为“1G”。所以,还是使用“-h”显示起来,更符合人的习惯。
下面是ls显示的相关描述:

ls -l|grep "^-"| wc -l)查看某个文件夹下文件的个数。
(ls -lR|grep "^-"| wc -l)查看某个文件夹下文件的个数,包括子文件夹下的文件个数。
(ls -l|grep "^d"| wc -l)查看某个文件夹下文件夹的个数。
(ls -lR|grep "^d"| wc -l)查看某个文件夹下文件夹的个数,包括子文件夹下的文件夹个数。
(ls -l| wc -l)查看文件夹下所有的文件和文件夹。也就是统计ls -l命令所输出的行数。


说明:

ls -l 
长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)


grep "^-"


这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l

 
统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于


一行信息对应一个文件,所以也就是文件的个数。

<think>我们被要求按照文件占内存大小(即文件大小)对文件进行排序。在Linux中,可以使用`ls`命令配合排序参数来实现。 常用的命令是:`ls -lSh` 或者 `ls -lS`,其中: - `-l` 表示长格式显示,这样可以看到文件大小等详细信息。 - `-S` 选项表示按文件大小排序,默认从大到小(降序)。 - `-h` 选项用于以人类可读的格式显示文件大小(如K、M、G)。 但是,如果要在当前目录及其子目录中查找并排序,则需要结合`find`和`sort`等命令。不过,根据问题,可能是要求当前目录下的文件排序(不包括子目录?),或者包括子目录? 不过,问题没有明确是否包含子目录,通常`ls`只列出当前目录。如果要求递归子目录,则需要使用其他方法。 但是,常见的需求是当前目录下的文件(不包括子目录)按大小排序。所以,我们给出两种方案: 1. 当前目录下的文件(不包括子目录)按大小排序(降序): ```bash ls -lSh ``` 2. 如果要包含当前目录下的子目录中的文件,并按照文件大小排序(降序),可以使用: ```bash find . -type f -exec ls -lSh {} + | sort -k5,5hr ``` 但是这样可能会因为`ls -lSh`的输出格式而使得排序复杂。另一种方法是使用`du`命令: ```bash du -ah | sort -hr ``` 但是`du`命令显示的是磁盘使用情况,和文件大小略有不同(比如对于稀疏文件)。不过,通常我们关心的是磁盘占用。 然而,问题要求的是“文件占内存大小”,通常我们理解为文件大小(即字节数),而不是磁盘占用块数。所以,使用`ls`的方式更直接。 但是,由于问题没有明确,我们按照最常见的需求给出:当前目录下的文件(不包括子目录)按大小排序。 另外,如果希望升序排序,可以将`ls`的`-S`改为`-rS`(即先按大小排序,然后反转顺序)或者使用`ls -lShr`。 因此,我们给出以下常用命令: - 降序(从大到小): ```bash ls -lSh ``` - 升序(从小到大): ```bash ls -lShr ``` 注意:`-h`选项是为了可读性,但排序时可能会因为单位不同而导致排序不准确(例如,1K比500字节大,但字符串排序时"1K"可能排在"500"后面?)。实际上,`ls -S`是按实际字节数排序,与`-h`无关,`-h`只是显示格式。 所以,即使使用`-h`,排序依据仍然是文件的实际字节大小,因此排序是准确的。 如果不需要详细列表,只需要文件名,可以去掉`-l`,使用`ls -Sh`(降序)或`ls -Shr`(升序)。但这样显示的文件大小没有单位(除非用`-h`,但`-h`通常和`-l`一起用才有效果?)。实际上,单独使用`-h`无效,需要配合`-l`。 因此,我们推荐使用`ls -lSh`(降序)或`ls -lShr`(升序)。 另外,如果文件很多,可以配合`head`或`tail`查看前几个或后几个。 例如,查看当前目录下最大的5个文件: ```bash ls -lSh | head -6 # 因为第一行是总用量,所以从第二行开始,取5行(加上第一行共6行) ``` 或者,为了避免目录的影响,我们可以只列出文件(不包括目录): ```bash ls -lSh | grep -v '^d' ``` 但这样也会把符号链接等排除,只保留普通文件。不过,问题要求的是文件,所以这样更准确。 因此,更精确的命令是: ```bash ls -lSh | grep '^-' # 只列出普通文件(以'-'开头) ``` 所以,综合起来,我们可以这样: 降序排列当前目录下的普通文件(不包括目录和隐藏文件): ```bash ls -lSh | grep '^-' ``` 注意:默认情况下,`ls`不显示隐藏文件(以.开头的文件),如果需要包含隐藏文件,则加上`-a`选项,但这样会包含`.`和`..`,所以通常我们不用`-a`。 如果也要包含隐藏文件(但不包括`.`和`..`),可以使用: ```bash ls -lShA | grep '^-' # -A 表示显示除.和..之外的所有文件,包括隐藏文件 ``` 但是,问题没有要求隐藏文件,所以我们使用普通方式。 总结:最常用的命令是`ls -lSh`(降序)和`ls -lShr`(升序),然后通过管道`grep '^-'`来只显示普通文件。 如果要求递归子目录,则使用`find`命令,但输出格式可能不够美观,我们可以用以下命令: ```bash find . -type f -exec du -h {} + | sort -rh ``` 或者,为了显示更详细的信息(如权限、时间等),可以使用: ```bash find . -type f -exec ls -lSh {} + | sort -k5,5hr ``` 但是,`find`的`-exec`调用`ls`时,每个文件都会执行一次`ls`,效率低。所以,我们使用`+`来一次传递多个文件。 不过,`find`结合`ls`的输出排序是对所有找到的文件进行排序。注意:`ls`的`-lSh`在`find`的`-exec`中可能会被忽略,因为`ls`在接收到多个文件时才会排序,而`find`传递的文件数量可能超过命令行参数限制,因此会被拆分成多次执行,导致排序不完整。所以,更可靠的方法是使用`find`输出文件列表,然后用`sort`按大小排序。 我们可以这样: ```bash find . -type f -printf "%s %p\n" | sort -nr | awk '{print $2}' ``` 然后可以配合`xargs`使用`ls -l`来显示,但这样会丢失排序信息?所以,我们可以在`sort`后记录大小,然后显示。 不过,这超出了问题的范围。我们主要回答当前目录的情况。 因此,针对问题,我们给出最常用的当前目录下的排序命令。 回答: 在Linux中,要按文件大小排序当前目录下的文件(不包括子目录),可使用以下命令: 1. **降序排列(从大到小)**: ```bash ls -lSh ``` 2. **升序排列(从小到大)**: ```bash ls -lShr ``` 如果只想显示普通文件(不包括目录、符号链接等),可以结合`grep`: ```bash ls -lSh | grep '^-' ``` 注意:以上命令默认不显示隐藏文件。若需包含隐藏文件(不包括`.`和`..`),使用`-A`选项: ```bash ls -lShA | grep '^-' ``` 若要递归排序当前目录及子目录下的所有文件,可使用: ```bash find . -type f -exec du -h {} + | sort -rh ``` 或更详细的: ```bash find . -type f -exec ls -lSh {} + | sort -k5,5hr ``` 但后者在文件数量极大时可能不完整,建议使用`du`方案。 示例输出(降序排列当前目录文件): ``` -rw-r--r-- 1 user group 2.0G Mar 10 15:00 large_file.iso -rw-r--r-- 1 user group 500M Mar 10 14:50 medium_file.zip -rw-r--r-- 1 user group 100K Mar 10 14:45 small_file.txt ``` §§相关问题§§ 1. 如何按文件大小反向排序(从小到大)显示当前目录下的文件? 2. 在Linux中,如何递归查找目录中最大的10个文件? 3. 使用`ls`命令时,如何同时显示文件大小和按时间排序? 4. `du`和`ls`命令在计算文件大小时有什么区别? 5. 如何只列出当前目录下的目录(而不是文件)并按大小排序?</think>在 Linux 中,按照文件实际占用内存大小文件大小排序文件,最常用的命令是 `ls` 配合排序参数。以下是具体实现方法: ### 1. 基本排序命令(降序:从大到小) ```bash ls -lSh ``` - `-l`:长格式显示(包含文件大小) - `-S`:按文件大小排序(降序) - `-h`:人性化显示大小单位(KB/MB/GB) ### 2. 升序排序(从小到大) ```bash ls -lShr ``` - `-r`:反转排序结果(实现升序) ### 3. 仅显示文件名(不包含其他信息) ```bash ls -S | xargs du -sh # 显示文件名和大小 或 ls -S | xargs ls -lh # 完整信息 ``` ### 4. 递归子目录排序 ```bash find . -type f -exec du -h {} + | sort -rh | head -n 20 ``` - `find . -type f`:查找当前目录及子目录所有文件 - `du -h`:计算文件大小 - `sort -rh`:按人类可读数值降序 - `head -n 20`:显示最大的20个文件 ### 示例输出 ``` -rw-r--r-- 1 user group 2.1G Mar 10 15:00 video.mp4 -rw-r--r-- 1 user group 850M Mar 10 14:30 archive.zip -rw-r--r-- 1 user group 120K Mar 10 14:15 document.txt ``` ### 注意事项 1. 目录显示的大小通常是元数据大小(非实际内容),要获取目录真实大小需用 `du -sh dirname` 2. 隐藏文件(以`.`开头的文件)默认不显示,需加 `-a` 参数 3. `ls -S` 按字节排序,`-h` 仅影响显示格式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值