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

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

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

/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

答案1

rm -rf /config/filegroups/*

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

rm -rf /config/filegroups/*/

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

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

答案2

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

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

答案3

这将删除包含/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"

答案4

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

所以:

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

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

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

相关内容