返回

Linux 中仅删除目录中的文件(不删除目录)的有效方法

Linux

如何在 Linux 中仅删除目录中的文件(不删除目录)

问题简介

在 Linux 系统中,有时我们可能需要从目录中删除所有文件,同时保留目录及其子目录中的文件。这对于清理杂乱目录或删除不需要的文件很有用,同时保持目录结构的完整性。

解决方法

方法 1:find 和 xargs

find . -type f -print0 | xargs -0 rm

此命令使用 find 命令查找当前目录及其所有子目录中的所有文件(-type f),并通过 null 终止符(-print0)打印它们的路径。然后,xargs 命令将这些路径传递给 rm 命令,使用 null 终止符(-0)进行处理,从而仅删除文件。

方法 2:shell 循环

for file in *; do
  if [ -f "$file" ]; then
    rm "$file"
  fi
done

此命令使用 shell 循环遍历当前目录中的所有条目(*)。对于每个条目,它检查它是否是一个普通文件(-f),如果是,则使用 rm 命令删除它。

方法 3:Bash globstar

rm **/*.txt

此命令使用 Bash 的 globstar(**)模式,递归搜索当前目录及其所有子目录中的所有 .txt 文件并删除它们。

提示

  • 在运行任何命令之前,请确保已备份重要数据。
  • 考虑使用 --dry-run 标志来查看命令将删除哪些文件,而不会实际删除它们。例如:
find . -type f -print0 | xargs -0 --dry-run rm

结论

通过使用上面介绍的方法,您可以仅删除 Linux 目录中的文件,而保留目录、子目录和子目录中的文件。根据您的具体需求和偏好,选择最适合您的方法。

常见问题解答

  1. 使用 globstar 会不会删除隐藏文件?

    • 是的,globstar 会删除所有文件,包括隐藏文件。
  2. 我怎样才能仅删除特定扩展名的文件?

    • 使用 globstar,您可以指定要删除的文件扩展名。例如,rm **/*.log 将仅删除 .log 文件。
  3. 我可以使用这些命令递归删除子目录中的文件吗?

    • 是的,find 和 xargs 命令可以与 -mindepth-maxdepth 标志一起使用,以递归删除特定深度范围内的子目录中的文件。
  4. 我该如何恢复误删的文件?

    • 如果您有备份,可以使用它来恢复已删除的文件。否则,您可能需要使用数据恢复工具尝试从磁盘中恢复它们。
  5. 还有其他删除目录中文件的方法吗?

    • 除了上面介绍的方法之外,您还可以使用 find 命令的 -delete 操作来删除文件。例如:find . -type f -delete