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


15

对于这种目录结构:

/config/filegroups/filegroupA/files/fileA1.txt
/config/filegroups/filegroupA/files/fileA2.txt
/config/filegroups/filegroupB/files/fileB1.txt
/config/filegroups/filegroupB/files/fileB2.txt
...

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

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


13
使用rm -rf / config / filesgroups / *有什么问题吗?
dsmsk80 2013年

3
或者甚至rm -rf /config/filegroups/filegroups{A,B}
Drav Sloan

@dsumsky默认情况下bash不包含“。” 路径名扩展中的文件夹。可能会或可能不会。我自己做shopt -s dotglob.bashrc,以解决这个问题。请注意,有人可能会觉得有用;)。
MiroslavKoškár13年

这有什么用吗?如果是这样,您介意接受答案,以帮助想要做同样事情的其他人(喜欢我)吗?
Mawg说恢复Monica

rm -rf /*会做;)---认真不做
穆罕默德·乌默

Answers:


28
rm -rf /config/filegroups/*

如果您只想删除目录(以及目录的符号链接),而所有文件都/config/filegroups保持不变,则可以使用斜杠:

rm -rf /config/filegroups/*/

如果您还想删除名称以a开头的目录.,并假设bash较新,则应使用dotglob shell选项:

shopt -s dotglob
rm -rf /config/filegroups/*/
shopt -u dotglob

并且请不要因为它不适用于rm -rf“ / config /
filegroups

5

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

find /config/filegroups -mindepth 1 -maxdepth 1 | xargs rm -rf

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

find /config/filegroups -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

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

find /config/filegroups -mindepth 1 -maxdepth 1

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

find /config/filegroups -mindepth 1 -maxdepth 1 -not -name "keep"

有什么理由不使用find-delete选项吗?
evilsoup

4
-delete拒绝删除非空目录。-maxdepth覆盖-depth,这是-delete删除非空目录所需的。没有它们,-maxdepth您将不容易看到要删除的目录,因为它还会列出目录中的文件。不使用-maxdepth还意味着您无法轻易使用-name。此外-delete,通过首先删除其中的所有对象来删除目录,如果它是一棵大而深的树,则可能要花费很长时间。
lesmana

4

我更喜欢使用findwith -exec,这会使您的呼叫像这样:

find /config/filegroups/ -maxdepth 1 -mindepth 1 -type d -exec rm -rf {} \;

-2

如果您已经在文件夹中,则只需键入 rm -rf ./**

所以:

cd /config/filesgroups
rm -rf ./**

这是一种全局模式,用于从本地路径中删除所有子文件夹。

./指的是本地文件夹...以及**下面的所有文件夹。


1
哪个文件夹,以及为什么使用“ **”
RalfFriedl

1
这与完全相同rm -rf ./*,除了如果您未-f在命令中使用,您可能会收到有关“没有这样的文件或目录”的诊断消息(因为在处理其内容之前,将递归删除最顶层的目录)通过rm)。
库萨兰达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.