如何删除目录中的所有文件和子目录而不删除bash中的目录?
是否有命令删除目录中的所有文件和子目录而不删除目录?
例如,如果我的目录“dontDeleteMe”具有子目录“1”,“2”,“3”并且每个子目录中都有几张图片,我该如何删除子目录“1”,“2”和“3”和删除父目录“dontDeleteMe”的所有文件?
要删除目录中的所有内容而不删除目录,请键入:
rm -rfv dontDeleteMe/*
请注意, /*
部分非常重要。 如果在*
之前放置一个空格,它将删除当前目录中的所有文件。
另外,在同一个命令中使用rm
, -r
和*
all时要非常小心。 它们可能是一个灾难性的组合。
更新:好的,我意识到你是否有隐藏/点文件[开头有点的文件名,例如.hidden
]然后这将使这些文件完好无损。
所以,对原始问题最简单的解决方案是: rm -rfv dontDeleteMe && mkdir dontDeleteMe
另一个是使用find
的-exec
选项或管道到xargs
(下面):
find dontDeleteMe/* -print0 | xargs -0 rm -rv
rm -r ./*
并不总是有效的唯一原因是因为你可以拥有与*
不匹配的隐藏文件和/或文件夹。
为此, bash
提供了一个选项,使*
匹配所有内容,甚至是隐藏的对象:
cd dont-delete-me shopt -s dotglob rm -r ./*
如果继续使用执行上述命令的shell,将dotglob
重置为默认(未设置)状态会很有用:
shopt -u dotglob
打开终端( Ctrl + Alt + T )ant类型:
find somedir -mindepth 1 -delete
这将匹配somedir
及其(大)子项中的所有文件和目录,包括“隐藏”点文件,但由于-mindepth 1
而排除somedir
本身,然后 – -delete
它们。
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;
使用xdev
选项仅在设备边界内删除文件。
要删除(在终端中)除名为“dontdelete”的基目录之外的所有文件和子目录:
rm -rf dontdelete/*
您可以将find
与-delete
标志一起使用:
find dontDeleteMe/* -delete
/*
很重要,因为它告诉find
只搜索INSIDE名为“dontDeleteMe”的文件夹。
还要确保-delete
标志位于find
命令的末尾。
rm -rf directory/{.*,/*}
说什么:
删除所有以。开头的文件。 在“目录”和所有其他文件中。
虽然Neftas友好地注意到这个解决方案并不安全!
更安全的解决方案是:
rm -rf directory/!(.|..)
我不确定为什么这么复杂,如果我错了,请帮助我
cd DoNotDeleteDir #<- this is just to make sure we are inside find . | xargs rm -rf
而已
有一个更简单的答案:
-
cd dontDeleteMe
-
rm -rf *
基本系统管理讲座时间: 当您使用这样的扫描命令时,请务必注意您的位置。
我不能说够了。 我不得不恢复一个盒子,因为有人没有注意并在/中键入rm -rf *
。
* nix假设如果你是root用户,或者如果你是root用户,那么你就知道自己在做什么。 所以在你做之前一定要确定你知道自己在做什么。
在您发出’rm’之前确保’cd’命令有效的替代方法是使用
cd dontDeleteMe && rm -rf *
- 对我来说最简单的事 – 一个Windows专家,但是一个ubuntu新手
- 单击启动器上的“文件”图标
- 导航到要删除的文件和文件夹所在的目录
- 右键单击文件旁边窗口的空白区域,然后单击“在终端中打开” – 保持文件窗口打开
- 终端窗口将打开,并将“设置”到您找到的文件夹
- 您可以输入“dir”(当我说类型时忽略引号)并按下回车键以显示文件和文件夹列表 – 只是为了certificate您“在”正确的文件夹中
- 输入“rm -rf *”并按Enter键
- 根据要删除的文件夹/文件的大小,系统会暂停
- 当终端提示返回时,您打开的文件窗口现在将显示“文件夹为空”
- 我使用这种方法取得了成功,我很高兴看到文件窗口中的文件/文件夹以及终端窗口中的Dir命令
- 我还感到欣慰的是,“文件”窗口显示文件夹现在为空 – 特别是因为我一直在追查这些文件,寻找他们所在的垃圾文件夹
- 感谢所有提交答案的人 – 这是非常有益的