如何判断linux是文件还是目录

供稿:hz-xin.com     日期:2025-01-16
Linux 判断是否是一个目录还是一个文件的方法

# 1、使用命令ls -l file#### 结果中 第一个字符是 “-” 则为普通文件, 是“d” 则为目录# 2、使用命令stat --printf=%F file#### 查看结果# 3、shellif [ -f file ];then echo "file"elif [ -d file ];then echo "directory"fi

ls -al
然后每个文件有一个标识符
开头是d的是目录,-是文件,l是软连接。

如果是脚本可以通过ls -l命令来判断,因为目录第一个字母是d。
如果是编程可以参考以下内容。
man stat;
stat.h中有判断是什么文件的宏:
S _ I S R E G ( ) 普通文件
S _ I S D I R ( ) 目录文件
S _ I S C H R ( ) 字符特殊文件
S _ I S B L K ( ) 块特殊文件
S _ I S F I F O ( ) 管道或F I F O
S _ I S L N K ( ) 符号连接( P O S I X . 1或S V R 4无此类型)

S _ I S S O C K ( ) 套接字(P O S I X . 1或S V R 4无此类型)

具体可以参照APUE文件目录相关章节。

下面给出一个具体的例子:

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char* argv[])
{
struct stat buf;
if(argc < 2)
{
  printf("Need Parameter");
  return -1;
}

if(lstat(argv[1], &buf) < 0)
{
  printf("lstat error for %s\r\n", argv[1]);
  return;
}

  if(S_ISDIR(buf.st_mode))
  printf("%s Is DIR\r\n", argv[1]);
  else if(S_ISREG(buf.st_mode))
  printf("%s Is FILE\r\n", argv[1]);

  return 0;
}

如果是脚本可以通过ls -l命令来判断,因为目录第一个字母是d。
如果是编程可以参考以下内容。
man stat;
stat.h中有判断是什么文件的宏:
S _ I S R E G ( ) 普通文件
S _ I S D I R ( ) 目录文件
S _ I S C H R ( ) 字符特殊文件
S _ I S B L K ( ) 块特殊文件
S _ I S F I F O ( ) 管道或F I F O
S _ I S L N K ( ) 符号连接( P O S I X . 1或S V R 4无此类型)

S _ I S S O C K ( ) 套接字(P O S I X . 1或S V R 4无此类型)

具体可以参照APUE文件目录相关章节。

下面给出一个具体的例子:

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char* argv[])
{
struct stat buf;
if(argc < 2)
{
  printf("Need Parameter");
  return -1;
}

if(lstat(argv[1], &buf) < 0)
{
  printf("lstat error for %s\r\n", argv[1]);
  return;
}

  if(S_ISDIR(buf.st_mode))
  printf("%s Is DIR\r\n", argv[1]);
  else if(S_ISREG(buf.st_mode))
  printf("%s Is FILE\r\n", argv[1]);

  return 0;
}

操作系统概念学结
linux目录本身也是一种文件,称为目录文件。单级目录存在文件命名的冲突,而在多级目录中,使用目录树来记录目录结构。在文件共享中,一般使用文件的绝对路径来访问文件,如果要进行共享文件的话,必须先回溯,在向下寻找共享的文件,这样的方法效率比较低下。而通过改进的链接文件的方法进行文件共享,会使目录树形成网状结构。

关于windows操作系统和Linux 区别
简洁。由于纯文本可以非常好地跨网络工作,所以 Linux 配置文件和数据都以文 本为基础。 对那些熟悉图形环境的人来说,Linux服务器初看可能比较原始。但是Linux开发 更多关注的是它的内在功能而不是表面上的东西。即使是在纯文本的环境中,Lin ux同样拥有非常先进的网络、脚本和安全能力。执行一些任务所需的某些表面上...

linux的认识
Linux 中的配置文件是人类可读的文本文件,这与过去的 Windows 中的 INI 文件类似,但与 Windows 的注册表机制在思路上有本质的区别。每一个应用程序都有其自己的配置文件,而且通常不与其他的配置文件放在一起。不过,大部分的配置文件都存放于一个目录树 (\/etc) 下的单个地方,所以看起来它们在逻辑上是在一起。...

文件没有权限怎么办
Windows 系统下通过查看文件扩展名判断文件是否能够执行,比如 .exe,.bat, .com 等,但是在 Linux 中,判断文件是否具有可执行权限是直接判断文件有没有 x 这个权限,和文件名无关。但是在 Linux 中,不只有文件具有权限,目录也有权限,文件是存放实际数据的地方,而目录是记录文件所在位置的清单,我们...

如何在进入程序的时候判断是否插入sd卡
需要板子启动linux内核到文件系统正常运行,这个时候插入sd卡。看你的串口的打印信息,会提示你是sd,vendor,容量等信息。然后执行命令步骤:1cd\/proc,然后ls查看proc目录有何文件 ,如果此目录为空,请输入:mount-tprocproc\/proc,然后再进入到\/proc目录,直到看到好多文件名为止。2cd\/proc,catpartitions...

用批处理 覆盖复制文件到指定路径当中
文件夹)可以同名,所以,你的问题关键只有一个,即判断源是文件还是子目录,分别用不同的命令去复制。ECHO OFF IF "%2"=="" GOTO ShowUsage IF EXIST %1\\NUL (ECHO D|XCOPY %1 %2 \/S \/E \/Q \/Y ) ELSE (COPY %1 %2 \/Y )GOTO :EOF :ShowUsage ECHO %~n0 源 目标 ...

我的百度面经(共8次面试)
8 Linux查看cpu占用率高的进程 9 查看占用某端口的进程和某进程监听的端口 10 如何查询日志文件中的所有ip,正则表达式 三面(8.3号更新): 数据库部门真的很严格,问题都挺难的。 1 讲一下项目 2 平时了解什么操作系统 Linux,说一下Linux排查问题常用的命令,ps,top,netstat,free,du等等 3 Linux的内存管理算...

Lunix操作系统与WINDS操作系统有什么区别它有什么优点?
1、Lunix操作系统:能运行主要的Unix工具软件、应用程序和网络协议。支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。2、WINDS操作系统:由开发操作系统的微软公司控制接口和设计,公开标准,因此,有大量商业公司在该操作系统上开发商业软件。参考资料来源...

什么是反码?
反码是数值存储的一种,多应用于系统环境设置,如linux平台的目录和文件的默认权限的设置umask,就是使用反码原理。在计算机内,定点数有3种表示法:原码、反码和补码。概述 在计算机内,有符号数有3种表示法:原码、反码和补码。几种表示法关系密不可分。原码 原码是计算机机器数中最简单的一种形式,...

红旗linux与windows的区别是什么
Linux 中的配置文件是人类可读的文本文件,这与过去的 Windows 中的 INI 文件类似,但与 Windows 的注册表机制在思路上有本质的区别。每一个应用程序都有其自己的配置文件,而且通常不与其他的配置文件放在一起。不过,大部分的配置文件都存放于一个目录树 (\/etc) 下的单个地方,所以看起来它们在逻辑...