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

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

对于这种类型的dir结构:

\\rdwlhsdevserver\root\user1\folders\testdat.txt
\\rdwlhsdevserver\root\abhay\testdat.txt
\\rdwlhsdevserver\root\testuser\folders1\folder2\testdat.txt
\\rdwlhsdevserver\root\devadmin\input\testdat.txt
\\rdwlhsdevserver\root\admin\testdata\testdat.txt

我知道我可以用来rm -rf <<folderPath>>删除父文件夹和所有子文件夹,但我想删除除\\\rdwlhsdevserver\root\Childfolder

运行后cmd,输出应如下所示:

\\rdwlhsdevserver\root\user1\
\\rdwlhsdevserver\root\abhay\
\\rdwlhsdevserver\root\testuser\
\\rdwlhsdevserver\root\devadmin\
\\rdwlhsdevserver\root\admin\

答案1

rm -rf /path/to/root/*/*

注意:请首先通过创建类似的测试目录结构来测试这一点。你的 shell 可能不支持这种语法(我在 bash 和 zsh 上测试过)。

答案2

使用 GNU 或 BSD find

find /path/to/root -mindepth 2 -delete

zsh

rm -rf /path/to/root/*/*(D)

但请注意,如果 中存在指向目录的符号链接/path/to/root,则会按照它们删除其中的文件。您还可能会遇到Arg list too big错误,可以通过启用rm内置函数来解决该错误:

zmodload zsh/files
rm -rf /path/to/root/*/.(D)

(内置版本rm可以删除.

如果您不想遵循符号链接:

zmodload zsh/files
dirs=(/path/to/root/*(D/)) && rm -rf $^dirs/.

相关内容