How to create tar for files older than 7 days using linux shell scripting

后端 未结 2 449
春和景丽
春和景丽 2020-12-15 11:20

I\'m writing shell script to backup files older than 7 days. Here is my code. But i\'m not getting expected result. Can anyone correct me?

#!/bin/bash
# Back         


        
相关标签:
2条回答
  • 2020-12-15 11:39

    Replace your find command with this and try again,

    find /var/log -type f -mtime +7 
    
    0 讨论(0)
  • 2020-12-15 11:51

    This will work:

    #!/bin/bash
    files=()
    while IFS=  read -r -d $'\0'; do
        files+=("$REPLY")
    done < <(find /var/log/ -mtime +7 -print0)
    tar cvfz backup.tar.gz "${files[@]}"
    

    Note the use of "${files[@]}" as opposed to ${files[*]}. "${files[@]}" will expand to provide tar with one argument per file name and will work even if the file names contain spaces, tabs, or newlines. By contrast, after the shell expands ${files[*]}, it will perform word splitting, potentially mangling your file names.

    For a detailed explanation of the loop used to create the files array, see: How can I store find command result as arrays in Bash

    All files and directories produced by the command find /var/log/ -mtime +7 will be included in the tar file. To include only files, not directories, see Skynet's answer.

    To archive logs from the seven most recent days

    Only one character need change:

    #!/bin/bash
    files=()
    while IFS=  read -r -d $'\0'; do
        files+=("$REPLY")
    done < <(find /var/log/ -mtime -7 -print0)
    tar cvfz backup.tar.gz "${files[@]}"
    

    This works because find interprets numeric arguments as follows:

    Numeric arguments can be specified as
    +n for greater than n,
    -n for less than n,
    n for exactly n.

    Thus, -mtime +7 means greater than 7 days old while -mtime -7 means less than 7. Note that find will ignore fractional parts. Thus +7 will include 8 days old but not 7.5 days old. See man find for details.

    0 讨论(0)
提交回复
热议问题