Shell 脚本ーー获取 < date > 之后修改的所有文件

我不希望在 PHP 中这样做,所以我希望一个熟悉 shell 脚本的人可以帮助我。

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

227237 次浏览

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

find . -type f -mtime -7 -print

输入 tar/zip 就可以了。

如果你有 GNUfind,那么有一个相关的选项军团。唯一的问题是它们的界面不够完美:

  • 修改时间(以分钟为单位)
  • -mtime n (modification time in days)
  • -newer file(修改时间比文件修改时间更短)
  • -daystart(从当前时间到一天开始调整开始时间)
  • 加上访问时间和“更改”或“创建”时间的备选方案。

最困难的部分是确定从一次开始的分钟数。

一个值得考虑的选项是: 使用 touch创建具有所需修改时间戳的文件; 然后使用 find-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来确保即使用户中断也能删除它,以此类推。

在 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.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参数的条件。

类似地,如果希望文件在给定日期前后1小时有修改日期, 在 if CONDITION中用 3600代替 120

你可以直接使用 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'first Sunday last month' +"%d-%b"