从(有时为空)目录中删除所有文件

从(有时为空)目录中删除所有文件

在我的脚本中,我有一个用于从目录中删除所有文件的命令www

rm -rf www/*

但是,在某些情况下该www目录是空的。然后他命令整个脚本失败。

有没有更好的命令我可以使用,不会在空目录上失败?

编辑:如果隐藏文件没有被删除,那就完美了,因为我想保留该.gitkeeep文件。我可以接受的最坏情况... && touch .gitkeep

答案1

使用 POSIX find

find www -path 'www/[!.]*' -prune -exec rm -r -- {} +

根据设计,如果不提供参数, find 不会失败。看说明书中的示例8这清楚地表明了这一点。

选项含义:

  • -path指定我们只查找以 开头www/并且后面没有点的路径(因此它从删除列表中排除隐藏文件)。

  • -prune防止 find 尝试在目录中下降(您已经在使用rm -r,它可以做到这一点)。

  • --inrm -r -- {} +允许处理找到的文件,即使它们以连字符开头。

答案2

有一个简单的方法纯bash(仅限内置):

即使你使用

set -e

要在非零退出错误时停止脚本,您可以执行以下操作:

shopt -s nullglob # don't treat * literally
shopt -u dotglob  # don't match .dotfiles

rm -rf  www/* 2>/dev/null || true
#             < hide err><       > 
#                      only if set -e

答案3

find www -mindepth 1 -maxdepth 1 -exec rm -r -- {} +

如果.gitkeepwww目录中,那么您可以执行以下操作:

find www -mindepth 1 -maxdepth 1 ! -name .gitkeep -exec rm -r -- {} +

相关内容