查找:禁止显示“目录不为空”

安德烈·克雷

要删除所有最近修改时间超过2周的非隐藏文件和目录,我正在使用:

find ~ -mindepth 1 -mtime +14 -name "[!.]*" -delete

有时会打印错误消息“目录不为空”。

我想使这些错误保持沉默(当我作为cronjob运行时会收到有关它们的通知),但是find当它们为空且超过2周时,我仍然想删除目录。

斯蒂芬·查泽拉斯(Stephane Chazelas)

如果您find支持-maxdepth-delete非标准扩展名,则它可能也支持-empty,因此您可以执行以下操作:

find ~ -mindepth 1 -mtime +14 ! -name '.*' \( ! -type d -o -empty \) -delete

(即,仅尝试删除空目录)

请注意,这-delete暗示了-depth(您希望删除包含文件的目录之前的文件)。

但是,从目录中删除文件会更新该目录的修改时间。这意味着即使目录包含已成功删除的旧文件(即使它们最初是旧文件)也不会被删除。

在这里,您可能根本不想删除任何目录:

find ~ -mtime +14 ! -name '.*' ! -type d -delete

或在删除任何文件之前记录旧目录的列表,删除非目录文件,然后在记录的列表中删除目录:

tmp=$(mktemp) &&
{
  rm -f -- "$tmp"
  find ~ -depth -mindepth 1 ! -name '.*' -mtime +14 -type d -print0 >&3
  find ~ -mtime +14 ! -name '.*' ! -type d -delete
  xargs -r0 rmdir <&4 2> /dev/null
} 3> "$tmp" 4< "$tmp"

或使用moreutils sponge(尽管这意味着将整个文件列表存储在内存中):

 find ~ -depth -mindepth 1 ! -name '.*' -mtime +14 -type d -print0 |
   sponge sh -c '
     find ~ -mtime +14 ! -name ".*" ! -type d -delete
     xargs -r0 rmdir'

zsh=(...)进程替换的形式:

{
  find ~ -mtime +14 ! -name ".*" ! -type d -delete
  xargs -r0 rmdir
} < =(find ~ -depth -mindepth 1 ! -name '.*' -mtime +14 -type d -print0)

或者,您可以删除所有空目录,而不管它们是否旧:

find ~ -mindepth 1 ! -name '.*' \( -mtime +14 ! -type d -o -type d -empty \) -delete

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

shell查找-删除“目录不为空”

来自分类Dev

mv:目录不为空

来自分类Dev

mv:目录不为空

来自分类Dev

显示不为空的DIV

来自分类Dev

无法移动目录不为空

来自分类Dev

mv:无法删除目录:目录不为空

来自分类Dev

删除目录时出错:目录不为空

来自分类Dev

无法删除项目。目录不为空

来自分类Dev

如何删除不为空的整个目录?

来自分类Dev

mv:“目录不为空”-如何将目录与`mv`合并?

来自分类Dev

即使目录不为空,此路径也会跳过空目录

来自分类Dev

删除文件和目录(即使不为空),但某些目录除外

来自分类Dev

如果不为空,则显示在angularJS中隐藏

来自分类Dev

不为空时在TextField中显示图标

来自分类Dev

显示不为空的php sql列

来自分类Dev

仅在同级不为空时显示按钮

来自分类Dev

即使列表不为空,emptyView 也始终显示

来自分类Dev

单元格不为空,但显示为空

来自分类Dev

字段验证显示空指针异常,即使不为空

来自分类Dev

如果给定目录不为空,如何执行Ansible任务?

来自分类Dev

“无法删除'some_directory':目录不为空”

来自分类Dev

为什么我用“ rm -rf”得到“目录不为空”?

来自分类Dev

Haskell 捕获目录不存在但不为空值

来自分类Dev

在目录后显示查找斜杠?

来自分类Dev

查找对象数组的长度,其中值不为空

来自分类Dev

如果目录为空,请执行此操作;如果目录不为空,请执行此操作

来自分类Dev

如何在Sybase中查找incomming参数是否不为null和不为空

来自分类Dev

如果变量为空/空则显示结果,如果变量不为空则显示其他结果

来自分类Dev

如果变量不为空,则PHP在每个变量后显示逗号

Related 相关文章

热门标签

归档