bash将日志文件复制到单独的目录中

时间:2018-01-10 08:19:00

标签: linux bash

我不是专家bash,但我尝试解决这个问题:

  1. 我有很多文件*.log,我不知道创建日期,
  2. 我需要将它们复制到名为$date_when_was_file_created的分隔目录中,例如。必须将创建的文件2017-01-12移动到名为2017-01-12
  3. 的目录

    创建的文件2017-02-12必须移至名为2017-02-12

    的目录

    所以我拥有:

    #!/bin/bash
    dirs=`ls -la -F --full-time *.LOG | awk '{print $6}'`
    filedate=`ls -la -F --full-time *.LOG | awk '{print $6}'>dat`
    
    mkdir $dirs
    
    for data in `cat dat`
            do echo " ther are file to be copied:--> `ls -la -F --full-time *.LOG | awk '{print $6 " " $9}' | grep $data  | awk '{print $2}'` "
                    if [[ $data == $dirs ]];
                            then cp `ls -la -F --full-time *.LOG | awk '{print $6 " " $9}' | grep $data  | awk '{print $2}'` $dirs
                    fi
            done
    

    但它不起作用,意味着创建目录,但不复制文件,为什么?我不知道......有什么建议吗?

1 个答案:

答案 0 :(得分:0)

POSIX shell和bash都提供参数扩展来修剪字符串的部分。 stat实用程序可以提供完整的创建时间(包括小时,分钟,秒......)。只需使用stat函数,并从stat返回的字符串创建时间中删除日期。然后使用日期创建一个目录并将日志文件移入其中。 E.g。

for file in *.log                   ## loop over log files
do
    ctime=$(stat -c%y "$file")      ## get full create time
    cdate="${ctime%% *}"            ## extract YYYY-MM-DD date
    mkdir -p "$cdate"               ## create dir if it doesn't exist
    mv "$file" "$cdate"             ## move log to directory
done

仔细看看,如果您有其他问题,请告诉我。