如何从目录中删除所有文件?

如何从目录中删除所有文件?

我最接近的答案是

# rm /path/to/directory/*.*

但这对于没有扩展名的文件不起作用......

答案1

Linux 不使用扩展名。文件名是否应该有扩展名由文件创建者决定。Linux 通过查看前几个字节来确定正在处理的文件类型。

  • 删除所有非隐藏文件* 在目录中使用:

    rm /path/to/directory/*
    

    但是,这会为每个子目录显示一个错误,因为在这种模式下只允许删除文件。

  • 要删除目录中的所有非隐藏文件和子目录(及其所有内容),请使用:

    rm -r /path/to/directory/*
    

* 隐藏文件和目录是名称以.(点)字符开头的文件和目录,例如:.hidden-file.hidden-directory/。请注意,在 Bash 中,如果dotglob 选项(默认情况下是关闭的)设置后,rm也会对隐藏文件起作用,因为当*shell 扩展它以提供文件名参数列表时,它们将被包含在内。

答案2

  • 要删除文件夹及其所有内容(包括所有内部文件夹):

    rm -rf /path/to/directory
    
  • 要删除所有文件夹内容(包括所有内部文件夹)但不包括文件夹本身:

    rm -rf /path/to/directory/*
    

    或者,如果您想确保隐藏的文件/目录也被删除:

    rm -rf /path/to/directory/{*,.*}
    
  • 要删除文件夹中的所有“文件”(不是删除内部文件夹):

    rm -f /path/to/directory/{*,.*}
    

警告:如果您的路径中有空格,请确保始终使用引号。

rm -rf /path/to the/directory/*

相当于 2 个单独的rm -rf调用:

rm -rf /path/to
rm -rf the/directory/*

为了避免此问题,您可以使用'单引号'(防止所有扩展,甚至是 shell 变量)或"双引号"(允许扩展 shell 变量,但防止其他扩展):

rm -rf "/path/to the/directory/"*

在哪里:

  • rm- 代表消除
  • -f- 代表力量例如,当您不想被询问/提示是否要删除档案时,这很有用。
  • -r- 代表递归这意味着您要递归地遍历每个文件夹并删除所有内容。

答案3

要删除目录中的所有文件(包括隐藏文件和子目录),请运行:

rm -rf /path/to/directory/{*,.*}

答案4

如果你只想删除 /path/to/directory 中的文件,你可以这样做

find /path/to/directory -type f -print0| xargs -0 rm 

或者

find /path/to/directory -type f -exec rm '{}' \;

您可以使用 进行加载find,优点是您可以列出找到的内容而不用通过管道传输,rm这样您就可以在开始之前看到将要删除的内容。

相关内容