删除目录下的所有文件

删除目录下的所有文件

我有一个目录,其中包含一些文件和一些包含其他文件的文件夹。我试图删除主目录中的这些文件,而不触及文件夹或其内容。

我正在用这个

rm /media/d/data/*

它工作正常,只删除文件,但我想知道为什么终端显示此消息:

rm: cannot remove /media/d/data/dd1: Is a directory

主文件夹下找到的所有文件夹都会显示相同的消息。谁能解释一下吗?有没有办法不在终端上显示此消息?

答案1

默认情况下,rm不删除目录。如果您希望删除目录,请使用rm -rf.如果您想隐藏该消息,请使用rm <dir> 2>/dev/null。请注意,所有其他错误消息也会被抑制。

答案2

这 * 选取两个文件目录。要删除文件,只需尝试此操作

find /media/d/data/ -maxdepth 1 -type f -delete

答案3

POSIXly:

find ! -name . -prune -type f -exec rm -f {} +

答案4

rm删除你告诉它的文件。*扩展到所有文件(包括目录),所以你告诉rm你删除目录,但它不会这样做。

大多数 shell 无法从通配符模式中排除目录。通配符模式仅按名称匹配文件,而不按类型匹配文件。你可以改用find

Zsh 有全局限定符它可以按类型、日期等匹配文件。在zsh中, 您可以使用

rm *(.)

删除所有常规文件,或变体,例如rm *(-.)删除常规文件和常规文件的符号链接,rm *(^/)删除除目录之外的所有文件等。

另请注意,*省略点文件(名称以 开头的文件.)。find将包括他们。在 zsh 中,*默认省略点文件;您可以D在括号内添加(例如rm *(.D))以包含它们。

相关内容