风过山林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条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog