Linux - 在嵌套目录

时间:2018-03-30 00:31:58

标签: linux bash

我有一组用户文件夹,可以保存他们的PDF文件。我想创建一个cron作业,它将删除所有嵌套目录中超过一周(以及仅文件,而不是目录)的所有文件。

因此,我的目录结构如下所示:

users
│  index.html
│
+---+ a-long-string-of-random-characters-1
|   │   file1.pdf
│   │   file2.pdf
│   
|
+---+ a-long-string-of-random-characters-2
│   │   file1.pdf
│   │   file2.pdf
|
|
...

我已经有大约8个目录。我需要删除user目录中的所有pdf,它是sub-direcotries。

我使用以下命令删除旧的db备份:

00 06 * * * find /path/to/backups/* -mtime +14 -delete

有些部分非常明显。 +14将成为+7/*将成为/*.pdf

00 06 * * * find /path/to/users/*.pdf -mtime +7 -delete

但子目录怎么样?

干杯

1 个答案:

答案 0 :(得分:2)

替换:

00 06 * * * find /path/to/users/*.pdf -mtime +7 -delete

使用:

00 06 * * * find /path/to/users/ -type f -iname '*.pdf' -mtime +7 -delete

注意:

  1. find将自动递归到子目录。我们只需要告诉它从/path/to/users/开始,它将以递归方式查看所有users个子目录。

  2. 要将搜索范围限制为常规文件,我们会添加-type f

  3. 要将搜索限制为名称以.pdf结尾的文件,我们添加-iname '*.pdf' (使用-iname会使匹配不区分大小写,这通常是一个好主意)

  4. 在创建上述cronjob之前,请尝试:

    find /path/to/users/ -type f -name '*.pdf' -mtime +7
    

    这将显示将删除哪些文件。如果您对此列表满意,那么可以使用-delete再次运行它或创建cronjob。