风过山林1025 2019-06-10 10:13 采纳率: 50%
浏览 240
已采纳

求解:Shell脚本问题,需求如下

得到一个文件夹内的文件,如果超过7天并且不是本月的文件,则按照其修改日期创建文件夹并将文件移入文件夹,完成归档分类。

这是我写的一个Shell脚本,可以得到文件夹内七天前的文件,但包含当前文件夹的目录。

#!/bin/bash
#文件夹目录 多个以空格分隔
dir_array=(/root/logs /data/PVsor)
#天数
creation_time=7
for((i=0; i<${#dir_array[*]}; i++))
do
   find .${dir_array[i]} -type f -mtime +"$creation_time" -name "*.*" 
   #date=`ls -l ${dir_array[i]} --time-style=full-iso|awk '{print $6,$7;}'|sed -e 's/\..*//' -e 's/[- :]//g'`
   echo ${dir_array[i]}
   #echo ${date}
   echo the dir name is ${dir_array[i]}
done

本人shell是个初学的新手,求各位赐教,谢谢!

  • 写回答

2条回答

  • weixin_43975295 2019-06-10 11:57
    关注

    这是我根据你的需求自己写的脚本,没有经过测试,但是思路应该是没问题的,可以参考参考。。

    #!/bin/bash
    ###获取当前月份###
    month_now=`date |awk '{print $2}'`
    
    ###创建函数,可筛选指定目录下的文件,超过七天并且不是本月的做处理###
    function screen_file () {
        ###先筛选出目录下超过七天的文件###
        find $1 -type f -mtime +7|while read line
        do
        ###进入目录中,方便相对路径的操作###
            cd $1
        ###获取被筛选出文件的修改月份,并做相应处理###
            month_file=`ll ${line} |awk '{print $6}'`
            change_time=`stat ${line} |grep Change |awk '{print $2}'`
            if [[ ${month_file} !== ${change_time} ]];then
                if [ -d ${change_time} ];then
                    mv $line ${change_time}
                else
                    mkdir ${change_time}
                    mv $line ${change_time}
                fi
            fi
        done
    }
    
    ###调用该函数去处理文件###
    dir_array=(/root/logs /data/PVsor)
    for((i=0; i<${#dir_array[*]}; i++))
    do
        screen_file ${dir_array[i]}
    done
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划