【问题标题】:How do I delete all files/driectories within my directory that are older than a day? [duplicate]如何删除我的目录中超过一天的所有文件/目录? [复制]
【发布时间】:2017-01-31 05:29:36
【问题描述】:

我正在使用带有 bash shell 的 Amazon Linux。我想删除某个目录中超过一天的所有目录和文件,所以我尝试运行此语句

sudo find /usr/java/jboss-as-7.1.3.Final/standalone/tmp/vfs -name "*" -type f -mmin +1441 -delete

但是,在运行上面之后,当我检查目录时,仍然有超过一天的子目录......

[mike@mymachine /]$ ls -al /usr/java/jboss-as-7.1.3.Final/standalone/tmp/vfs
total 240
drwxr-xr-x  17 jboss jboss  4096 Sep 20 23:24 .
drwxr-xr-x   5 jboss jboss  4096 Jun 24  2013 ..
drwxr-xr-x 186 jboss jboss 24576 Sep 20 21:12 deployment2368807199465dba
drwxr-xr-x  93 jboss jboss 20480 Sep 20 23:23 deployment2617ff35c8bff41a
drwxr-xr-x   6 jboss jboss 24576 Sep 19 20:26 deployment3571c00385713fe3
drwxr-xr-x   2 jboss jboss 20480 Sep 19 17:39 deployment3d351ede58f283dd
drwxr-xr-x   2 jboss jboss 20480 Sep 19 15:25 deployment4290f5e8ea8315f2
drwxr-xr-x 297 jboss jboss 24576 Sep 22 03:30 deployment9b31473d9eac9da0
drwxr-xr-x   2 jboss jboss 24576 Sep 20 18:56 deploymentceee45a133e7107d
drwxr-xr-x  93 jboss jboss 20480 Sep 19 18:55 deploymentefd5fbdbb2c4c444
drwxr-xr-x   2 jboss jboss  4096 Sep 20 18:57 temp165d12bb32054951
drwxr-xr-x   2 jboss jboss  4096 Sep 19 17:40 temp32dd5d98d5a4b497
drwxr-xr-x   2 jboss jboss  4096 Sep 19 15:26 temp59d119fda3e5ddc4
drwxr-xr-x   2 jboss jboss  4096 Sep 19 20:27 temp7f6ba3704ffeea57
drwxr-xr-x   2 jboss jboss  4096 Sep 20 23:23 temp861658110cf44173
drwxr-xr-x   2 jboss jboss  4096 Sep 19 18:56 tempcdad4bb17e60cb75
drwxr-xr-x   2 jboss jboss  4096 Sep 20 21:13 tempe1ee5a5f7f5c7636

编写将删除某个目录中超过一天的所有内容的语句的正确方法是什么?

编辑:嘿,你的建议没有奏效。我收到了这个错误

[mike@mymachine ~]$ sudo find /usr/java/jboss/standalone/tmp/vfs/ -mindepth 1 -mtime +1 -delete
find: cannot delete `/usr/java/jboss/standalone/tmp/vfs/deploymentefd5fbdbb2c4c444': Directory not empty
find: cannot delete `/usr/java/jboss/standalone/tmp/vfs/deployment3571c00385713fe3': Directory not empty

【问题讨论】:

  • 你使用的是-type f,这意味着find只处理文件。
  • 我投票结束这个问题,因为它不是关于编程的。它可能属于 Linux 站点。
  • @TomFenech - 即使删除“-type f”选项仍会导致“目录不为空”错误。
  • 那是因为它试图删除旧目录但它不能因为它们不是空的。您希望它对包含其他内容的旧目录做什么?
  • 我想把它全部删除。愿它再也不会被听到。

标签: linux bash shell find delete-file


【解决方案1】:

尝试使用“-exec”选项而不是“-delete”,然后您可以在每个文件上添加您想要的任何命令,包括非常可怕的“rm -rf”。

例如,要对超过一天的每个文件调用“echo -n”,请运行以下命令。注意“{}”是找到的文件/目录的占位符。

sudo find /usr/java/jboss-as-7.1.3.Final/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec echo -n {} \;

已编辑以包含“-mindepth 1”,否则搜索结果中会包含根搜索目录。

所以,递归删除指定目录中超过 1 天的所有内容:

sudo find /usr/java/jboss-as-7.1.3.Final/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;

【讨论】:

  • 不幸的是,这不起作用。我运行了最后一条语句,它导致了大量的错误——“find: `rf': No such file or directory”。没有任何内容被删除。
  • 糟糕,这里有一个错字,应该是 '-exec rm -rf' 。当它递归删除一个文件夹,然后尝试删除任何子文件夹/文件时,您会收到一些“找不到文件”警告,但最终它们会消失。
  • 新语句打印出类似“find: `/usr/java/jboss-as-7.1.3.Final/standalone/tmp/vfs/temp723ffd1cefda891a': No such file or directory”的语句,但是旧的文件/目录确实已经消失了,所以它看起来像它的工作。
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多