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

我最接近的是

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

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

Linux不使用扩展。 由文件的创建者来决定名称是否应该有扩展名。 Linux查看前几个字节来弄清楚它正在处理什么样的文件。

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

    rm /path/to/directory/*

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

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

    rm -r /path/to/directory/*

*隐藏的文件和目录是那些名称以开头的文件和目录 . (点)字符,例如: .hidden-file.hidden-directory/. 请注意,在Bash中,如果 dotglob 选项 (默认情况下是关闭的)设置, rm 也会对隐藏文件采取行动,因为它们将在 * 由shell展开以提供文件名参数列表。

  • 删除包含所有内容的文件夹(包括所有内部文件夹):

    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/torm -rf the/directory/*

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

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

哪里:

  • rm -代表 移走
  • -f -代表 警队 例如,当您不想被询问/提示是否要删除存档时,这很有用。
  • -r -代表 递归 这意味着你想递归地向下每个文件夹并删除所有内容。

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

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

删除所有文件和目录(包括 隐藏的 一)在一个目录中,你可以尝试以下:

  • 删除文件夹,然后重新创建它

    rm -rf dir_name && mkdir dir_name
  • 使用方法 find

    find dir_name -mindepth 1 -delete  

在这里我们指定 -mindepth 1 以排除目录dir_name本身。
看看下面的链接:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

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

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

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

你可以用 find,好处是你可以列出找到的东西,而不用管道 rm 因此,您可以在开始之前查看将删除的内容。

如果您还想删除所有子目录和目录本身,则可以使用 rm -rf /path/to/directory. 但在按return之前,请务必仔细检查您的线路, rm -rf 可能会导致大量的havock,例如,如果您在拥有超级用户权限时意外地在第一个斜杠后插入空格。..

由于这个问题是不断在谷歌的顶部,当我自己搜索这个:

其他答案遭受不同的问题:

  1. 其中一些包括 ... 这是嘈杂的,混乱的,令人讨厌的。

  2. 他们中的一些人忘记了隐藏的文件(以点开头的文件)。

  3. 它们不会以正确的(最深优先)顺序删除以允许目录删除。

  4. 它们会下降到其他(挂载)文件系统中,这通常是不需要的。

  5. 他们很难用额外的参数正确扩展(更多关于下面)。

因此,要递归删除目录中的所有文件和文件夹,请执行此操作:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

请注意,我添加了一个 -xdev 防止下降到坐骑的论点(如 /proc 等。).

为什么不呢? -depth-delete?

尽管人们不断贬低我,但这些方法有一个缺点:看起来它们的可扩展性不足以允许 -pruneing子目录(而不会引入更多问题)。 与此方法相反,您可以插入

-not \( -path "${DIR}/subdir" -prune \)

-mindepth 排除的论点 subdir 删除其内容。

你可以 cd 进入目录,然后运行命令 rm *.* 就像在DOS,如果你还记得。

要删除当前目录,您可以使用 rm -d ./*

-d告诉删除目录。

请参阅这里的答案,这可以删除隐藏文件以及任何警告和删除目录本身https://stackoverflow.com/questions/43832107/delete-contents-but-not-directory-in-linux

我没有足够的声誉来添加一个真正的答案,但是当在bash中使用shopt-s dotglob&&rm/path/to/directory/*解决方案时,(shopt-s dotglob&&rm/path/to/directory/*)(带括号)将防止shopt-s dotglob泄漏超出这一个命令。 (括号在子shell中运行包含的命令。)