首页 > 其他分享 >打印出目录下所有文件名(给出 C、Bash两个版本)

打印出目录下所有文件名(给出 C、Bash两个版本)

时间:2023-04-12 22:24:27浏览次数:37  
标签:tmp direntp 文件名 打印 include Bash file dirname dir

bash

function fl () {
    if [[ -z "$1" ]]; then
        fl_read_dir $PWD
    elif [[ "${1: -1}" == '/' ]]; then
        fl ${1%/}
    else
        fl_read_dir $1
    fi
}

function fl_read_dir () {
    for file in `ls -a $1`; do
        if [ -d $1"/"$file ]; then
            if [[ $file != '.' && $file != '..' ]]; then
                fl_read_dir $1"/"$file
            fi
        else
            echo $1"/"$file
        fi
    done
}

C

#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

void do_ls (char *);

int main (int argc, char *argv[]) {
    if (argc == 1)
        do_ls ("."); // 打开当前目录
    else
        for (int i = 1; i < argc; i++)
            do_ls (argv[i]);
}
void do_ls (char *dirname) {
    if (dirname[strlen (dirname) - 1] == '/')
        dirname[strlen (dirname) - 1] = '\0';
    struct dirent *direntp;
    DIR *dir_ptr = opendir (dirname);
    if (dir_ptr == NULL) {
        fprintf (stderr, "can not open %s", dirname);
    } else {
        while (direntp = readdir (dir_ptr), direntp != NULL)
            if (direntp->d_type == DT_DIR) {
                if (strcmp (direntp->d_name, ".") &&
                    strcmp (direntp->d_name, "..")) {
                    char *tmp_dir = (char *) malloc (
                        strlen (dirname) + strlen (direntp->d_name) + 1 + 1);
                    strcpy (tmp_dir, dirname);
                    strcat (tmp_dir, "/");
                    strcat (tmp_dir, direntp->d_name);
                    do_ls (tmp_dir);
                    free (tmp_dir);
                }
            } else
                printf ("%s/%s\n", dirname, direntp->d_name);
        closedir (dir_ptr);
    }
}

标签:tmp,direntp,文件名,打印,include,Bash,file,dirname,dir
From: https://www.cnblogs.com/YHFBlogs/p/17311532.html

相关文章

  • Bash工作手册
    本文主要讲述bash的配置,各种命令(包含内置命令以及类似内置命令的指令),运行原理等主题Bash配置自动补全$typecompletecompleteisashellbuiltinhttps://juejin.cn/post/6844904096411942926https://jasonkayzk.github.io/2020/12/06/Bash命令自动补全的原理/系统自带......
  • 在Bash中,单引号和双引号
    在Bash中,单引号和双引号是用来区分字符串的两种方式。双引号:当使用双引号包含一个字符串时,其中的变量会被解析并替换成其对应的值,而且可以使用转义字符。例如:name="John"echo"Mynameis$name"输出结果为:MynameisJohn单引号:当使用单引号包含一个字符串时,其中的所有内容都会......
  • AIX系统下sed的用法与实例——查询/打印/替换字符串并生成文件/删除
    sed是AIX中非常重要的文本流编辑器,它对输入的文本进行查询/打印/替换/删除等操作,并将结果写到标准输出。sed 命令包含很多功能,用于选择要修改的行,并只对选择的行作更改。首先,使用sed命令请记住:sed命令以行为单位对文本进行处理,处理完当前行,接着下一行文本输入进行处理,依次循环......
  • C语言变量范围,打印格式
    int:               -2147483648~2147483647long:             -2147483648~2147483647           2147483647:linux2038问题    打印格式%ld   unsignedlong %lulonglong:    ......
  • 打印日历网站
    可打印日历的三个网站!可以用来做记录、写计划啥的。Calendarpedia:网页链接7calendar:网页链接Calendar:网页链接​......
  • 3d打印机 marlin固件 EEPROM Version ERROR 版本错误
    问题描述:刷入新固件后,提示EEPROMVersionERROR  有两个选项(Restart)(Ingore)选择Ingore可以继续正常使用 问题原因:多为marlin版本和EEPROM版本不一致导致,开机时通过pronterface链接打印机,可以看到如下提示:  解决方法:通过Prontface依次发送下......
  • 一个或多个页边距被设置到也可打印的页面范围之外,处理方式
    DevExpress ReportPrint的时候,出现这样的问题:  要忽略这个提示,方法为:report.CreateDocument();report.PrintingSystem.ShowMarginsWarning=false; ......
  • BASH: issues
     $@"$@"$*"$*"a.shecho"$@"echo$@echo"$*"echo$*b.sh"$@"[email protected]"$*"b.sh$*b.shecho$#forparam;doecho"param=$param"done ......
  • 从命令行中读入一个文件名,判断该文件是否存在。如果该文件存在,则在原文件相同路径下创
    例如:读入/home/java/photo.jpg则创建一个文件/home/java/copy_photo.jpg新文件内容和原文件内容相同packageio.homework;importjava.io.*;importjava.util.Scanner;publicclassq23{publicstaticvoidmain(String[]args){Scannerscanner=ne......
  • 批量改文件名,教你一键将新旧文件名称、文件路径导出EXCEL表格
    文件太多,如何批量重命名文件,并将新旧文件名以导出EXCEL表格的形式保存到电脑上呢?下面随小编一起来试试。所需工具安装一个文件批量改名高手文件素材若干操作步骤步骤1:运行【文件批量改名高手】,如果素材都是文件的话,可以在“文件批量重命名”中操作步骤2:将文件素材导入后,选择一个命......