我有很多临时目录,它们都以__temp__
开头,里面充满了无用的文件(例如:__temp__user_uploads
)。我想使用一个清理函数来删除这些目录。我的函数尝试运行以下命令:
find . -name __temp__* -exec rm -rf '{}' \;
如果我运行该命令,存在多个
__temp__
目录(__temp__foo
和__temp__bar
),则输出如下:find: __temp__foo: unknown option
如果我运行该命令且只有一个__temp__
目录(__temp__foo
),则会删除它并输出:
find: ./__temp__foo: No such file or directory
为什么命令不起作用,为什么会出现不一致的情况,我该如何修复?
find . -maxdepth 1 -type d -name '__temp__*' -print0 | xargs -0 rm -rf
。该命令的作用是删除以“__temp__”开头的当前目录中的所有子目录和它们的内容。 - pilcrow-exec
不是find
的一个好功能吗?pilcrow,感谢您的解释! - orokusaki-exec
并不是本质上的坏选择,但它会为每个匹配的文件触发一次操作:rm foo
,然后rm bar
,以此类推。xargs
会将许多文件名作为参数传递给其子命令,因此更加高效:rm foo bar ...
除非你有成千上万个文件,否则xargs
只会调用一个rm
实例。 - pilcrow