use*_*637 69 command-line bash rm directory
是否有删除目录中所有文件和子目录而不删除目录的命令?
例如,如果我有目录dontDeleteMe与子目录1,2,3和每个子目录中有几张图片,我怎么能删除子目录1,2以及3所有的文件在其中,而不删除父目录dontDeleteMe?
Mat*_*att 81
要删除一切在一个目录不删除的目录,键入:
rm -rfv dontDeleteMe/*
Run Code Online (Sandbox Code Playgroud)
请注意,该/*部分非常重要。如果在 之前放置一个空格*,它将删除当前目录中的所有文件。
另外,要非常小心地使用rm,-r并且*都在同一个命令中。它们可能是一个灾难性的组合。
更新: 好的,我意识到如果您确实有隐藏/点文件 [文件名以点开头,例如.hidden] 那么这将使这些文件保持完整。
因此,对于原始问题,最简单的解决方案是:
rm -rfv dontDeleteMe && mkdir dontDeleteMe
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用find's-exec选项或管道xargs(如下):
find dontDeleteMe/* -print0 | xargs -0 rm -rv
Run Code Online (Sandbox Code Playgroud)
小智 35
开端子(Ctrl+ Alt+ T)蚂蚁类型这样的:
find somedir -mindepth 1 -delete
Run Code Online (Sandbox Code Playgroud)
这将匹配其中的所有文件和目录somedir及其(大)子文件,包括“隐藏的”点文件,但somedir由于-mindepth 1, 将-delete其排除在外。
enz*_*tib 29
rm -r ./*不总是有效的唯一原因是因为您可以拥有不匹配的隐藏文件和/或文件夹*。
为此,bash提供一个选项来*匹配所有内容,甚至隐藏对象:
cd dont-delete-me
shopt -s dotglob
rm -r ./*
Run Code Online (Sandbox Code Playgroud)
dotglob如果您继续使用执行上述命令的 shell,将其重置为默认(未设置)状态会很有用:
shopt -u dotglob
Run Code Online (Sandbox Code Playgroud)
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;
Run Code Online (Sandbox Code Playgroud)
使用xdev选项仅在设备边界内删除文件。
| 归档时间: |
|
| 查看次数: |
210832 次 |
| 最近记录: |