删除目录中子目录中的文件+文件

删除目录中子目录中的文件+文件

我想删除目录 /data 中的所有文件,其中包括 8 个其他子目录。

是否有一个命令可以递归清除所有子目录但不删除实际文件夹?

答案1

以下命令将删除/data目录中或目录下的任何非目录文件,例如常规文件、符号链接、命名管道、套接字等:

find /data ! -type d -delete

find对于没有非标准谓词的实现-delete,请-exec rm -f {} +在其位置使用:

find /data ! -type d -exec rm -f {} +

这将找到其中或之下的所有非目录文件/data,并将rm -f尽可能大批量地执行这些文件。

答案2

使用查找命令

find /data -type f -exec rm -rf {} \; 

由于文件的类型选择类型 f,将仅删除文件。

答案3

您可以使用该find命令来执行此操作。

要创建一个测试用例来重现您的描述,请让我执行以下操作 :cd /tmp 1.2.3.4 。mkdir -p testing/{a,b,c}cd testing/touch {a,b,c}/{1,2,3}

要验证是否有多个目录,每个目录包含多个文件:

$ find -type f
./c/3
./c/2
./c/1
./b/3
./b/2
./b/1
./a/3
./a/2
./a/1

您现在可以find再次使用它来删除它找到的任何内容:

find -type f -delete

如果您现在find -type f再次运行,它将不会返回任何结果,因为文件已经消失,但您可以看到目录仍然存在:

$ ls
a  b  c

find命令的威力非常大。您可以使用 发现更多相关信息man find

相关内容