如何删除一个目录下的所有文件?

如何删除一个目录下的所有文件?

我正在尝试删除目录中的所有文件和子目录。我曾经rm -r删除所有文件,但我想删除所有文件子目录,不包括顶级目录本身。

例如,我有一个像images.它包含文件header.pngfooter.png一个子目录。

现在我想删除header.png,footer.png和子目录,但不删除images

我怎样才能在Linux中做到这一点?

答案1

如果您的顶级目录名为images,则运行rm -r images/*。这使用 shell glob 运算*rm -rimages.

答案2

要删除隐藏文件,您必须指定:

rm -r images/* images/.*

对于包含.和的 shell ..,这将导致类似的错误

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

但它会删除隐藏文件。

没有错误消息的方法是使用 find/delete 和 mindepth。这是 gnu-find。

find images -mindepth 1 -delete

您的发现可能缺少-mindepthor-delete谓词,在这种情况下,您可以这样做:

find images/. ! -name . -prune -exec rm -rf {} +

答案3

删除所有文件和目录(包括)在目录中,您可以尝试以下操作:

  • 用于ls -Ab匹配所有文件/目录

    cd dir_name && rm -rf `ls -Ab`
    
  • 用于find匹配所有文件/目录

    find dir_name -mindepth 1 -delete
    

    或者,如果您find不支持-delete

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • 删除该文件夹,然后重新创建它

    rm -rf dir_name && mkdir dir_name
    
  • 在bash中,

    shopt -s dotglob  
    rm -rf dir_name/*
    

答案4

试试这个版本:

 rm -r test/*

相关内容