linux shell 中判断文件、目录是否存在的方法

    本文主要介绍了linux shell 中判断文件、目录是否存在的方法,分享给大家

    -e filename 如果 filename存在,则为真
    -d filename 如果 filename为目录,则为真
    -f filename 如果 filename为常规文件,则为真
    -L filename 如果 filename为符号链接,则为真
    -r filename 如果 filename可读,则为真
    -w filename 如果 filename可写,则为真
    -x filename 如果 filename可执行,则为真
    -s filename 如果文件长度不为0,则为真
    -h filename 如果文件是软链接,则为真

    常用例子

    如果存在某文件,则删除

    
    if [ -f trials ]; then rm ${result_path}trials; fi

    如果没有文件夹,则创建

    
    if [ ! -d $result_name ];then
       mkdir -p $result_name
    fi

    shell命令判断文件或文件夹是否存在,先直接看实例:

    
    #!/bin/sh
    
    #判断文件存在,判断是否为文件夹等
    testPath="/Volumes/MacBookProHD/Mr.Wen/08 shell命令"
    testFile="/Volumes/MacBookProHD/Mr.Wen/08 shell命令/fileWen"
    
    #判断文件夹是否存在 -d
    if [[ ! -d "$testPath" ]]; then
     echo "文件夹不存在"
    else
     echo "文件夹存在"
    fi
    
    #判断文件夹是否存在,并且具有可执行权限
    if [[ ! -x "$testFile" ]]; then
     echo "文件不存在并且没有可执行权限"
    else
     echo "文件存在并有可执行权限"
    fi
    
    #判断文件是否存在
    if [[ ! -f "$testFile" ]]; then
     echo "文件不存在"
    else
     echo "文件存在"
    fi
    
    

    在shell命令脚本编写当中,会遇到各种对文件的判断,除了以上常用的判断,还有其他的可以使用,如下:

    Conditional Logic on Files
    -a file exists.
    -b file exists and is a block special file.
    -c file exists and is a character special file.
    -d file exists and is a directory.
    -e file exists (just the same as -a).
    -f file exists and is a regular file.
    -g file exists and has its setgid(2) bit set.
    -G file exists and has the same group ID as this process.
    -k file exists and has its sticky bit set.
    -L file exists and is a symbolic link.
    -n string length is not zero.
    -o Named option is set on.
    -O file exists and is owned by the user ID of this process.
    -p file exists and is a first in, first out (FIFO) special file or
    named pipe.
    -r file exists and is readable by the current process.
    -s file exists and has a size greater than zero.
    -S file exists and is a socket.
    -t file descriptor number fildes is open and associated with a
    terminal device.
    -u file exists and has its setuid(2) bit set.
    -w file exists and is writable by the current process.
    -x file exists and is executable by the current process.
    -z string length is zero.

    shell 判断文件内容是否改变

    判断文件内容是否改变:

    1)md5值判断

    2)diff 判断

    
    #添加日志时间戳
    function fn_showlog()
    {
      local curtime;
      curtime=`date +"%Y%m%d-%H:%M:%S"`
      echo "$curtime ------ $1";
    }
    #判断文件内容是否一致
    function diff_file(){
      for file in `ls $1`
      do 
        if [ ! -f "$2$file" ];then
          fn_showlog "存在新增文件:$2$file"
          return 0
        else
          diff $file $2$file
          if [ $? -ne 0 ];then
            fn_showlog "文件内容发生变化:$file"
            return 0
          fi
        fi
      done
      return 1
    }
    
    
    diff_file "python*Ip" "/home/admin/tools/"
    if [ $? -eq 0 ];then
      fn_showlog "内容发生改变......"
    else 
      fn_showlog "内容未发生改变,退出脚本!"
      exit 0
    fi

    到此这篇关于linux shell 中判断文件、目录是否存在的方法的文章就介绍到这了,更多相关linux shell判断文件存在内容请搜索lingkb以前的文章或继续浏览下面的相关文章希望大家以后多多支持lingkb!