删除子文件夹而不删除父文件夹

Bal*_*tar 23 rm

对于这种类型的目录结构:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...
Run Code Online (Sandbox Code Playgroud)

我知道我可以rm -rf /config/filesgroups用来删除父文件夹和所有子文件夹......

但我想只删除/filegroupA/filegroupB等等,而不是删除/config/filegroups

evi*_*oup 36

rm -rf /config/filegroups/*
Run Code Online (Sandbox Code Playgroud)

如果您只想删除目录(和目录的符号链接),而保留任何文件/config/filegroups不变,您可以使用尾部斜杠:

rm -rf /config/filegroups/*/
Run Code Online (Sandbox Code Playgroud)

如果你还想删除名称以 a 开头的目录.,假设你有一个相当新的 bash,你应该使用 dotglob shell 选项:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob
Run Code Online (Sandbox Code Playgroud)


les*_*ana 5

这将删除/config/filegroups包括“隐藏”文件和目录(名称以 开头.)下的所有文件和目录。

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

如果文件或目录名称包含空格,您必须这样做:

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

奖励:您可以先检查将要删除的内容,如下所示:

find /config/filegroups -mindepth 1 -maxdepth 1
Run Code Online (Sandbox Code Playgroud)

如果你想保留某些文件或目录,你可以这样做:

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"
Run Code Online (Sandbox Code Playgroud)

  • `-delete` 拒绝删除非空目录。`-maxdepth` 覆盖了 `-depth`,`-delete` 需要它来删除非空目录。如果没有 `-maxdepth`,您将无法轻松查看将要删除的目录,因为它还列出了目录中的文件。不使用 `-maxdepth` 也意味着你不能轻易使用像 `-name` 这样的过滤器。此外,`-delete` 会先删除目录中的所有对象,如果它是一棵又大又深的树,这可能需要很长时间。 (4认同)

小智 5

我更喜欢使用findwith -exec,这会让你的电话是这样的:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)