ls -R 的递归实现

本文通过实现ls -R命令来深入理解递归和动态数组,旨在巩固相关知识。内容包括递归逻辑的梳理和代码展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ls -R 的递归实现

LinuxC文件操作 递归 动态数组


之前对递归和动态数组用的不是很多,可能理解已不是很深 
这一次实现ls -R的递归刚好巩固了自己的薄弱点 
下面主要是重新梳理一下之前的逻辑 
不说说了,先放码:

void display_dir(int flag,char*name)

{
DIR * dir;
struct dirent  *ptr;
int     i,count = 0;
struct stat buf;
char name_dir[10000];
if(chdir(name)<0)                              //将输入的目录改为当前目录,下面操作的前提
{
  my_err("chdir",__LINE__);
}
if(getcwd(name_dir,10000)<0){
  my_err("getcwd",__LINE__);                   //获取当前目录的绝对路径(重要,下面的打开目录的操作需要这个路径,否则需要手动添加)
}
 printf("%s:\n",name_dir);

 dir = opendir(name_dir);     //用新获得的路径打开目录
if(dir==NULL){
  my_err("opendir",__LINE__);
}
while((ptr = readdir(dir))!=NULL){
  if(f_maxlen<strlen(ptr->d_name))
         f_maxlen = strlen(ptr->d_name);
    count++;
}
closedir(dir);

//动态数组
  char**filenames =(char**)malloc(count*sizeof(char*));    //要进行初始化 
  memset(filenames,0,sizeof(char
### Linux `ls -lR` 命令用法 `ls -lR` 是一种常用的组合命令,用于递归列出指定目录及其所有子目录的内容,并以长格式显示文件和目录的详细信息。以下是关于该命令的具体说明: #### 命令结构 ```bash ls [选项] [路径] ``` - `-l`: 使用长列表格式显示文件和目录的信息[^2]。 - `-R`: 对当前目录以及其所有的子目录进行递归操作,逐一列出每个子目录中的内容[^2]。 #### 输出字段解释 当使用 `ls -lR` 时,每行输出表示一个文件或目录的详细信息,具体字段含义如下: 1. **权限**: 文件或目录的访问权限(如 `-rw-r--r--` 表示普通文件,`drwxr-xr-x` 表示目录)[^3]。 2. **链接数**: 硬链接的数量。 3. **所有者**: 文件或目录所属的用户名称。 4. **组名**: 文件或目录所属的用户组名称。 5. **大小 (字节)**: 文件的大小,单位为字节。 6. **最后修改时间**: 文件最后一次被修改的时间戳。 7. **文件/目录名**: 文件或目录的名字。 #### 示例演示 假设有一个名为 `/example` 的目录,其中包含多个子目录和文件,执行以下命令可以查看整个目录树的详细信息: ```bash ls -lR /example ``` ##### 输出样例 ```plaintext /example: total 8 drwxr-xr-x 2 user group 4096 Oct 10 12:00 subdir1 drwxr-xr-x 2 user group 4096 Oct 10 12:00 subdir2 -rw-r--r-- 1 user group 256 Oct 10 12:00 file1.txt /example/subdir1: total 4 -rw-r--r-- 1 user group 128 Oct 10 12:00 subfile1.txt /example/subdir2: total 4 -rw-r--r-- 1 user group 128 Oct 10 12:00 subfile2.txt ``` 在此输出中: - `/example` 下有两个子目录 (`subdir1`, `subdir2`) 和一个文件 (`file1.txt`)。 - 子目录内的文件也被逐级列出并展示详细的属性信息。 #### 注意事项 如果目标目录层次较深或者包含大量文件,则 `ls -lR` 可能会产生非常庞大的输出结果。在这种情况下,建议配合分页工具(如 `less` 或 `more`)来逐步浏览数据[^3]: ```bash ls -lR /example | less ``` 此外,在某些场景下可能需要过滤特定类型的条目,比如仅保留普通文件而忽略目录项。这可以通过管道符结合正则表达式实现[^4]: ```bash ls -lR /example | grep '^-' | wc -l ``` 此语句会统计 `/example` 路径下所有普通文件的数量。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值