代码之家  ›  专栏  ›  技术社区  ›  Pete

shell script_get all files modified after<date>

  •  126
  • Pete  · 技术社区  · 16 年前

    我不想在PHP中这样做,所以我希望一个擅长shell脚本编写的人能帮上忙。

    我需要一个脚本,它递归地运行在目录中,并查找所有最后修改日期大于某个日期的文件。然后,它将对保存路径信息的文件进行tar和zip压缩。

    10 回复  |  直到 8 年前
        1
  •  128
  •   salezica    11 年前

    简单如:

    find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz
    

    哪里 find . -mtime -1 将选择前一天修改的当前目录中的所有文件(递归)。您可以使用分数,例如:

    find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz
    
        2
  •  87
  •   Jonathan Leffler    16 年前

    如果你有GNU find 还有大量的相关选项。唯一的障碍是它们的接口还不太稳定:

    • -mmin n (修改时间(分钟)
    • -mtime n (修改时间(天)
    • -newer file (修改时间比文件修改时间新)
    • -daystart (将开始时间从当前时间调整为一天的开始时间)
    • 以及访问时间和“更改”或“创建”时间的备选方案。

    最困难的部分是确定一次后的分钟数。

    一个值得考虑的选择:使用 touch 创建具有所需修改时间戳的文件;然后使用 找到 具有 -newer .

    touch -t 200901031231.43 /tmp/wotsit
    find . -newer /tmp/wotsit -print
    rm -f /tmp/wotsit
    

    这将查找比2009-01-03T12:31:43更新的文件。显然,在剧本中, /tmp/wotsit 将是一个带有PID或其他值的名称,以使其唯一;并且 trap 以确保它被删除,即使用户中断,等等。

        3
  •  30
  •   one-liner    11 年前

    你可以直接用焦油来做,甚至更好:

    tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
    

    这指示tar压缩比2014年1月1日18:00:00更新的文件。

        4
  •  17
  •   Jason Luther    16 年前

    这对一些文件有效。如果任何路径中都有空格,则需要包括“-print0”和“xargs-0”。此示例查找最近7天内修改的文件。要查找最近7天之前修改过的内容,请使用“+7”。

    find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2
    

    AS this page 警告:如果参数很多,xargs可能会导致tar命令多次执行,而“-c”标志可能会导致问题。在这种情况下,您需要:

    find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar
    

    您不能用tar更新压缩后的tar存档,所以您必须在第二步中bzip2或gzip它。

        5
  •  12
  •   Chris Doggett    16 年前

    这将显示过去7天内修改的所有文件。

    find . -type f -mtime -7 -print
    

    用管子把它塞进柏油/拉链里,你就应该很好了。

        6
  •  3
  •   Luixv    16 年前

    在Linux下,尝试阅读find命令的手册页

    man find
    

    像这样的东西应该

     find . -type f -mtime -7 -print -exec cat {} \; | tar cf - | gzip -9
    

    你拥有它

        7
  •  3
  •   mouviciel    16 年前

    您可以通过以下方式获取X天前最后修改的文件列表:

    find . -mtime -x
    

    然后您只需在结果列表中对文件进行tar和zip操作,例如:

    tar czvf mytarfile.tgz `find . -mtime -30`
    

    上个月修改的所有文件。

        8
  •  3
  •   Protagonist    9 年前

    我只需执行以下操作来备份7天前的所有新文件

    tar --newer $(date -d'7 days ago' +"%d-%b") -zcf thisweek.tgz .
    

    请注意,您也可以将“7天前”替换为任何适合您需要的内容。

    可以是: date -d'yesterday' +"%d-%b"

    甚至: date -d'first Sunday last month' +"%d-%b"

        9
  •  2
  •   Uwe Keim    13 年前

    此脚本将查找在给定日期之前和之后具有两分钟修改日期的文件(您可以根据需要更改条件中的值)。

    PATH_SRC="/home/celvas/Documents/Imp_Task/"
    PATH_DST="/home/celvas/Downloads/zeeshan/"
    
    cd $PATH_SRC
    TODAY=$(date  -d "$(date +%F)" +%s)
    TODAY_TIME=$(date -d "$(date +%T)" +%s)
    
    
    for f in `ls`;
    do
    #       echo "File -> $f"
            MOD_DATE=$(stat -c %y "$f")
            MOD_DATE=${MOD_DATE% *}
    #       echo MOD_DATE: $MOD_DATE
            MOD_DATE1=$(date -d "$MOD_DATE" +%s)
    #       echo MOD_DATE: $MOD_DATE
    
    DIFF_IN_DATE=$[ $MOD_DATE1 - $TODAY ]
    DIFF_IN_DATE1=$[ $MOD_DATE1 - $TODAY_TIME ]
    #echo DIFF: $DIFF_IN_DATE
    #echo DIFF1: $DIFF_IN_DATE1
    if [[ ($DIFF_IN_DATE -ge -120) && ($DIFF_IN_DATE1 -le 120) && (DIFF_IN_DATE1 -ge -120) ]]
    then
    echo File lies in Next Hour = $f
    echo MOD_DATE: $MOD_DATE
    
    #mv $PATH_SRC/$f  $PATH_DST/$f
    fi
    done
    

    例如,您只希望修改日期早于给定日期的文件,可以更改 120 0 在里面 $DIFF_IN_DATE 参数丢弃的条件 $DIFF_IN_DATE1 参数。

    同样,如果您希望在给定日期之前和之后1小时内具有修改日期的文件, 只是替换 一百二十 通过 3600 在里面 if CONDITION .

        10
  •  1
  •   Kovács Gergely    8 年前

    检查此Github存储库: ZFYL/zipper

    如果您将index.php和zipper.php放在服务器的任何地方,通过主页,您可以查看在两个日期之间修改的文件,或者对它们进行压缩。

    主要功能:

    • 递归搜索目录
    • 查找在给定的两个日期/时间之间修改的文件
    • 列出那些文件
    • 压缩这些文件
    • 使用regex排除路径es

    顺便说一下,这个PHP工具非常快,而且 可以在5秒内运行20000个文件 在最坏的情况下。

    还可以包括 ZIPP.PHP 任何PHP文件中的代码库和调用内置函数,您可以在存储库的wiki中找到描述( Using functions from ZFYL zipper in your code )