shell脚本之文件和目录

前言

这篇主要涉及的是目录和文件,包括获取信息,创建,修改。实例是目录文件的备份。

是否存在

判断文件或者目录是否存在:

  1. 文件夹不存在则创建:
if [ ! -d "/data/" ];then
mkdir /data
else
echo "文件夹已经存在"
fi
  1. 文件存在则删除
if [ ! -f "/data/filename" ];then
echo "文件不存在"
else
rm -f /data/filename
fi
  1. 判断文件夹是否存在
if [ -d "/data/" ];then
echo "文件夹存在"
else
echo "文件夹不存在"
fi
  1. 判断文件是否存在
if [ -f "/data/filename" ];then
echo "文件存在"
else
echo "文件不存在"
fi
  1. 文件比较符

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ “/data/file1” -nt “/data/file2” ]
-ot 判断file1是否比file2旧 [ “/data/file1” -ot “/data/file2” ]

获取名称

获取文件名

假设给定的路径名为:

/home/project/log/202000405.log
  • awk解法
    用“/”做分隔符,然后打印出最后的那一部分。实现代码如下:

resFile=`echo/home/project/log/202000405.log | awk -F "/" '{print $NF}'`
  • Bash Shell本身提供了basename命令,可以直接获取路径名最后的文件名,实现代码如下:
resFile=`basename /home/project/log/202000405.log`

获取目录

  • awk解法
    可以灵活的使用分隔符,混合正则表达式:
dirPath=`echo /home/project/log/202000405.log | awk -F '/[^/]*$' '{print $1}'`
  • 官方解法(dirname)
    Bash Shell本身提供了dirname命令,特别方便,可以直接获取路径对应的目录名,实现代码如下:
dirPath=`dirname /tmp/csdn/zhengyi/test/adb.log`

实例

备份指定目录下的所有*.log 文件 ,到该目录backup 目录下,加上当天的时间后缀

#!/bin/sh
#backup logs *.log
#author wuyingzhen
#date 20200405

PROJECT_PATH='/home/dev/services/game/'   
LOG_DIR='logs'
LOG_PATH=$PROJECT_PATH$LOG_DIR
BACK_DIR='backup'
BACKUP_PATH=$LOG_PATH'/'$BACK_DIR
DATE_SUFFIX=`date +'%Y%m%d%H%M'`
LOG=$LOG_PATH'/backup.log'

# 查找日志文件目录,不存在就退出
if [ ! -d $LOG_PATH  ]
then
    echo "$LOG_PATH not exist,backup log fail!!" >> $LOG
    exit 1
fi


# 查找备份目录,不存在就创建
if [ ! -d $BACKUP_PATH  ]
then
  echo "$BACKUP_PATH not exist,creat it"   >> $LOG
  mkdir $BACKUP_PATH
fi
echo "start backup $LOG_PATH/*.log to $BACKUP_PATH"  >> $LOG

# 备份目录下*.log 文件,然后清空原日志文件
for LOGFILE in $(ls "$LOG_PATH"/*.log)
do
 FILENAME=`basename $LOGFILE`
 LOGFILE_BACKUP=$BACKUP_PATH'/'$FILENAME$DATE_SUFFIX
 cp $LOGFILE $LOGFILE_BACKUP
 echo "back $LOGFILE_BACKUP success!"   >> $LOG
 echo "clear $LOGFILE"     >> $LOG
 > $LOGFILE

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值