我想删除目录 /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
。