按文件名排序 linux
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按文件名排序 linux相关的知识,希望对你有一定的参考价值。
参考技术A 命令ls -l | awk 'print $9' | sort -k1.1nr
1
1.命令所示中先使用ls -l列出所有文件,然后使用awk只取最后一列文件名,最后使用sort进行排序。
2.sort参数-k小数点前面的1表示按结果的第一列排序(这里我们只有文件名一列所以直接是1),小数点后面的1表示从文件名的第一个字符开始排序(假如你文件名是a1,h2,c3,p4,g5,你使用1.2这样就会忽略第一个字符)。
3.sort参数-n表示按照数值大小排序。
4.sort参数-r表示反向排序。
如何在Linux上按名称对某个目录中的文件进行排序
【中文标题】如何在Linux上按名称对某个目录中的文件进行排序【英文标题】:How to sort files in some directory by the names on Linux 【发布时间】:2011-07-03 10:30:09 【问题描述】:我使用opendir()
和readdir()
来显示目录中的文件名。但他们是无序的。我怎样才能对它们进行排序?语言是 C。
【问题讨论】:
@Christoffer Hammarström:对不起,我忘了说我必须使用 C 你应该添加C
标签。
这比看起来更难,因为 Unix 按惯用顺序对文件进行排序,即 p5A 排在 p10A 和 p50A 之前。除非您将文件重命名为 p05A,否则您的字母排序将无法获得按名称排序的优点。
【参考方案1】:
也许您可以使用 scandir() 代替 opendir 和 readdir?
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int
main(void)
struct dirent **namelist;
int n;
n = scandir(".", &namelist, 0, alphasort);
if (n < 0)
perror("scandir");
else
while (n--)
printf("%s\n", namelist[n]->d_name);
free(namelist[n]);
free(namelist);
【讨论】:
其实我尝试使用它,但它有一些错误。你能举一些例子或细节吗? 您可以在规范中找到如何使用scandir
(按字母排序)的示例(参见示例部分):pubs.opengroup.org/onlinepubs/9699919799/functions/scandir.html【参考方案2】:
在 C 中对某些内容进行排序的惯用方法是使用 qsort()
函数。为此,最好安排将所有文件名收集到一个指针数组中,然后对数组进行排序。
这并不太难,但它确实需要一些动态数组管理,或者您对事物引入静态限制(文件名的最大长度、文件的最大数量)。
【讨论】:
scandir
为您完成这项工作。唯一不好的是你不能使用文件描述符指定目录。你必须传递名字。【参考方案3】:
您必须动态构建包含文件名的数据结构并确保它已排序。
您可以使用名称构建一个数组或链表,然后对其进行排序,但我更喜欢通过插入二叉树来对插入的值进行排序。
【讨论】:
以上是关于按文件名排序 linux的主要内容,如果未能解决你的问题,请参考以下文章