自动删除超过 7 天的文件

Jac*_*cco 20 delete cron automation files

我是 linux 的完全菜鸟,但我开始掌握它的窍门。我有一台运行 FTP 服务器的 Ubuntu Server 16.04 来备份安全视频文件。该文件将被存储在文件夹一样:/home/securityfolder1/home/securityfolder2/home/securityfolder3等。

请注意,每个securityfolderN用户都是不同的用户。

因为我不希望我的硬盘驱动器一直都满,所以我想每天删除这些文件夹中超过 7 天的文件。

ter*_*don 35

首先,此命令将查找并删除/home名称以 开头的任何子目录中超过 7 天的所有文件securityuser

find /home/securityuser* -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)

您需要-mtime +6而不是+7因为-mtime计算 24 小时周期。正如解释-atime的部分man find-mtime以相同的方式工作):

   -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.
Run Code Online (Sandbox Code Playgroud)

因此,要查找 7 天或更多天前修改过的文件,您需要查找 6 天前修改过的文件,因此-mtime +6.

下一步是让这个命令每天运行一次。由于每个securityuserN用户都是不同的用户(您可能需要重新考虑该设置,它使一切变得更加复杂),因此必须以 root 身份运行。所以,编辑/etc/crontab

sudo nano /etc/crontab
Run Code Online (Sandbox Code Playgroud)

并添加这一行:

@daily root find /home/securityuser* -mtime +6 -type f -delete
Run Code Online (Sandbox Code Playgroud)

这将find每天运行一次命令并删除文件。


小智 5

据我所知:

尝试find这样的命令:

find ./dirc/* -mtime +6 -type f -delete

./dirc/* : is your directory (Path)
-mtime +6 : modified more than 6 days ago (therefore, at least 7 days ago)
-type f : only files
-delete : no surprise. Remove it to test before like rm
Run Code Online (Sandbox Code Playgroud)

  • @Melebius 不,路径不应该被引用,特别是当包含全局字符时。您“希望”它由 shell 扩展,而引用会阻止这一点。例如,尝试:“find '/u*' -name local”。当包含全局字符时,应该引用诸如“-name "foo*"”之类的指令。 (2认同)