我不希望在 PHP 中这样做,所以我希望一个熟悉 shell 脚本的人可以帮助我。
我需要一个脚本,通过目录递归运行,并发现所有文件的最后修改日期大于某个日期。然后,它将对保存路径信息的文件进行 tar 和 zip。
这将显示在过去7天内修改的所有文件。
find . -type f -mtime -7 -print
输入 tar/zip 就可以了。
如果你有 GNUfind,那么有一个相关的选项军团。唯一的问题是它们的界面不够完美:
find
-mtime n
-newer file
-daystart
最困难的部分是确定从一次开始的分钟数。
一个值得考虑的选项是: 使用 touch创建具有所需修改时间戳的文件; 然后使用 find和 -newer。
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来确保即使用户中断也能删除它,以此类推。
/tmp/wotsit
trap
在 linux 下尝试读取 find 命令的手册页
man find
这样的东西应该
find . -type f -mtime -7 -print -exec cat {} \; | tar cf - | gzip -9
而你拥有它
你可以得到最后一次修改时间晚于 x 天的文件列表,具体方法是:
find . -mtime -x
然后只需要在结果列表中添加 tar 和 zip 文件,例如:
tar czvf mytarfile.tgz `find . -mtime -30`
上个月修改过的所有文件。
简单如下:
find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz
其中,find . -mtime -1会选择前一天修改过的所有文件(递归) ,你可以使用分工作目录,例如:
find . -mtime -1
find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz
这将适用于一定数量的文件。您需要包含“-print0”和“ xargs -0”,以防任何路径中有空格。此示例查找在过去7天内修改的文件。要查找在最后7天之前修改的内容,请使用“ + 7”。
find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2
正如 这一页警告的那样,如果有很多参数,xargs 可能会导致 tar 命令多次执行,而“-c”标志可能会导致问题。在这种情况下,你会希望这样:
find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar
不能用 tar 更新压缩的 tar 归档文件,因此必须在第二步中使用 bzip2或 gzip。
这个脚本将找到在给定日期之前和之后有两分钟修改日期的文件(并且您可以根据需要修改条件中的值)
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
例如,您希望文件只在给定日期之前有修改日期,您可以在 $DIFF_IN_DATE参数中将 120改为 0,放弃 $DIFF_IN_DATE1参数的条件。
$DIFF_IN_DATE
120
0
$DIFF_IN_DATE1
类似地,如果希望文件在给定日期前后1小时有修改日期, 在 if CONDITION中用 3600代替 120。
if CONDITION
3600
你可以直接使用 tar,甚至更好:
tar -N '2014-02-01 18:00:00' -jcvf archive.tar.bz2 files
这指示 tar 压缩比2014年1月1日18:00:00更新的文件。
我只需要执行以下操作来备份7天前的所有新文件
tar --newer $(date -d'7 days ago' +"%d-%b") -zcf thisweek.tgz .
注意,你也可以用任何适合你需要的东西来代替“7天前”
可以是: date -d'yesterday' +"%d-%b"
date -d'yesterday' +"%d-%b"
甚至是: date -d'first Sunday last month' +"%d-%b"
date -d'first Sunday last month' +"%d-%b"