如何删除目录和子目录内的文件但不删除文件夹?
我需要能够在 Linux 命令行上执行此操作。
和rm
?
答案1
GNUfind
和“现代”版本
GNU find
(Linux 发行版附带的版本)和find
最近的 macOS 版本[哪些?]中有一个delete
选项。
find . -type f -delete
这将删除当前目录和子目录中的所有内容。目录将保留在原处。
这比下面的方法更有效率,因为它不需要使用 分叉一个新进程rm
。考虑文件路径时它也更安全。
GNU find 手册有关于删除文件的非常详细的部分。
传统的find
传统方式find
可能没有-delete
选项。在这种情况下,您可以使用选项exec
对匹配的文件执行某些操作 - 在本例中rm
为 ing。
find . -type f -exec rm {} \;
find
输送到xargs
您还可以使用find
输出来输入xargs
,它将文件路径作为rm
命令的参数。
find . -type f -print0 | xargs -0 rm
此-print0
选项是必需的,可避免文件名包含空格导致破坏。一般情况下,如果没有此选项,请勿使用此类选项,因为它非常不安全。