通过脚本清理昨天的文件

通过脚本清理昨天的文件

我想运行一个每天早上运行的 cronjob,将前一天在特定目录中创建的文件移动到使用之前日期标题创建的文件夹中。

例如,Motion 在名为快照的目录中创建了一系列 jpg 文件。我想让脚本运行并找到快照目录中昨天创建的所有文件(包括它创建的 avi 文件),并将它们移动到以昨天的日期为标题的文件夹中。

有人试过吗?Motion 是否已经内置了此功能,而我只是没有看到它?

下一步是让它在 7-14 天后自动清除,但那是另一篇文章的内容。

答案1

这可以通过 轻松完成find。相关选项包括:

   -mtime n
          File's data was last modified n*24 hours ago.  See the  comments
          for -atime to understand how rounding affects the interpretation
          of file modification times.
   -atime n
          File was last accessed n*24 hours ago.  When  find  figures  out
          how  many  24-hour  periods  ago the file was last accessed, any
          fractional part is ignored, so to match -atime +1, a file has to
          have been accessed at least two days ago.
   -exec command ;
          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command, not just in arguments
          where it is alone, as in some versions of find.  Both  of  these
          constructions might need to be escaped (with a `\') or quoted to
          protect them from expansion by the shell.  

因此,要移动过去 24 小时内在目录jpg中创建的所有文件,你可以运行snapshots

find /home/yourusername/snapshots/ -name '*jpg' -mtime +0 -exec mv {} /path/to/dest

被找到的每个文件名替换{}。引号不是必需的,因为find在执行命令之前可以妥善处理奇怪的文件名。表示+0“文件上次修改时间至少atime1*24小时前,如上面引用的部分所述。

如果您想将这些内容移动到以昨天的日期命名的目录中,则必须创建它(使用选项,-p如果mkdir目录存在则不会抱怨):

mkdir -p $(date -d yesterday +%F)

date命令将以以下YYYY-MM-DD格式打印昨天的日期。例如,2014-06-18。您可以将两个命令合并到同一个find -exec调用中(\后面的命令-mtime只是为了方便阅读,它允许您将命令分成多行):

find /home/yourusername/snapshots/ -name '*jpg' -mtime +0 \
 -exec bash -c "mkdir -p $(date -d yesterday +%F) && mv {} $(date -d yesterday +%F)" \;

因此,要使用 运行它,您可以在(run )cron中添加如下一行:crontabcrontab -e

0 9 * * * find /home/yourusername/snapshots/ -name '*jpg' -mtime +0 -exec bash -c "mkdir -p $(date -d yesterday +%F) && mv {} $(date -d yesterday +%F)" \;

上述find命令将在每天上午 9 点运行。

答案2

find /path/to/my/folder/ -type f -mtime -1 -exec ls -l "{}" \;

如果您想移动它们,您可以更改 exec 命令:

find /path/to/my/folder/ -type f -mtime -1 -exec mv "{}" /path/to/my/newfolder/ \;

"{}"是与搜索匹配的每个文件名的完整路径。

\;命令行末尾需要。

您可以使用以下方法删除它们-delete

find /path/to/my/folder/ -type f -mtime -1 -delete

相关内容