【问题标题】:Delete directories older than X days删除早于 X 天的目录
【发布时间】:2015-02-17 16:35:20
【问题描述】:

因此,我查看了此处有关删除超过 14 天的目录的每个脚本。我编写的脚本适用于文件,但由于某种原因它没有删除目录。所以这是我的脚本。

#!/bin/bash
find /TBD/* -mtim +1 | xargs rm -rf

所以这段代码成功地删除了 TBD 中的文件,但它留下了两个目录。我检查了它们的时间戳,根据时间戳,它们距上次修改至少 2 天。特别是 12 月 16 日 16:10 所以我无法弄清楚。我的 crontab 我每分钟运行一次并记录它,它只在日志中显示。

+ /scripts/deletebackups.sh: :2:BASH_XTRACEFD=3xargs rm -rf
+ /scripts/deletebackups.sh: :2: BASH_XTRACEFD=3find /TBD/contents TBD/contents -mtime +1

我使用了内容,因为内容实际上是我们 pxe 服务器中的人名。我检查了这两个目录内的每个文件和文件夹,它们的时间戳与父目录应该是一样的,但它仍然没有被删除。

这可能是权限问题吗?我使用 sudo nano deletebackups.sh 编写了脚本 当我在最左边的 TBD 下键入 ls 时,它显示 drwxr-xr-x 3 hscadministrator root 4096 DEC 16 16:10 用于两个不会删除的目录。 我不太熟悉所有这些字母的含义。

我已经尝试过的这段代码的其他迭代是

find /TBD/* -mtime +1 rm -r {} \;

【问题讨论】:

    标签: linux bash directory crontab rm


    【解决方案1】:

    将 -exec 和 -f 添加到您的查找中:

    find /TBD/* -mtime +1 -exec rm -rf {} \;
    

    注意,如果您要删除超过 14 天的文件,则需要更改 mtime:

    -mtime +14
    

    【讨论】:

    • 嘿应该在原帖中提到过。我需要它来删除文件和目录,这样就行不通了。但只是为了好奇,我尝试了它来删除目录,但它仍然没有工作。
    • 您忘记了 find 命令中的 -exec,如果您更改它应该可以工作。
    • 嗯,它必须在一个特定的位置,不是 .只标记所有目录?我不想删除所有目录。
    • 添加了-exec,运行脚本时仍然没有删除它们。
    • 尝试添加 -exec rm -rf {} \; ...如果这不起作用,那么我不太确定会发生什么...查看我的编辑
    【解决方案2】:

    删除 /TBD 中超过 1 天的目录:

    find /TBD -mtime +1 -type d | xargs rm -f -r
    

    【讨论】:

    • 我也希望它删除文件,但如有必要,我将在脚本中添加另一行来指定文件。我会尝试这个,看看它是否有效。
    • 不。这两个目录仍然存在。
    • 您确定运行 find 命令的用户具有删除这些目录所需的权限吗?
    • 这是一台 PXE 服务器,除了我们的一个管理帐户外没有其他用户。 ls -lct 显示管理员帐户对 TBD 目录中的所有内容都具有 rwx 权限。该脚本是使用 sudo 在管理员帐户下创建的,因此应该如此。
    • 在这种情况下,要隔离问题,请尝试仅运行命令的find 部分:find /TBD -mtime +1 -type d。命令的输出是否显示应该删除的目录?如果是这样,如果您运行命令的 rm 部分,使用目录名称,即 rm -f -r /path/to/directory,会发生什么?
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多