Answers:
先前的答案几乎是正确的。但是,如果希望它们起作用,则不应该引用Shell Glob字符。因此,这是您要查找的命令:
rm -rf "/target/directory with spaces/"*
请注意,*在双引号之外。这种形式也可以使用:
rm -rf /target/directory\ with\ spaces/*
如果您具有*
如上所示的in引号,则它将仅尝试删除*
在目标目录中按字面命名的单个文件。
另外三个选择。
find
与-mindepth 1
和一起使用-delete
:
-mindepth级别
请勿以小于级别(非负整数)的级别应用任何测试或操作。
-mindepth 1表示处理除命令行参数以外的所有文件。-delete
删除文件;如果删除成功,则为true。如果删除失败,则会发出错误消息。如果-delete失败,则find的退出状态将为非零(最终退出时)。使用-delete会自动打开-depth选项。
使用此选项之前,请先使用-depth选项进行仔细测试。
# optimal?
# -xdev don't follow links to other filesystems
find '/target/dir with spaces/' -xdev -mindepth 1 -delete
# Sergey's version
# -xdev don't follow links to other filesystems
# -depth process depth-first not breadth-first
find '/target/dir with spaces/' -xdev -depth -mindepth1 -exec rm -rf {} \;
2.使用find
,但使用文件,而不使用目录。这样可以避免rm -rf
:
# delete all the files;
find '/target/dir with spaces/' -type f -exec rm {} \;
# then get all the dirs but parent
find '/target/dir with spaces/' -mindepth 1 -depth -type d -exec rmdir {} \;
# near-equivalent, slightly easier for new users to remember
find '/target/dir with spaces/' -type f -print0 | xargs -0 rm
find '/target/dir with spaces/' -mindepth 1 -depth -type d -print0 | xargs -0 rmdir
3.继续并删除父目录,然后重新创建它。您可以创建一个bash函数来使用一个命令执行此操作。这是一个简单的单线:
rm -rf '/target/dir with spaces' ; mkdir '/target/dir with spaces'
怎么样
rm -rf /target/directory\ path/*
如果可能有以开头的文件。在目标目录中。
rm -rf "/target/directory path/*" "/target/directory path/.??*"
此秒将匹配以。开头的所有内容,除了。和..它将在.a之类的名称上失败,但这不是很常见。如有必要,可以对其进行调整以覆盖所有情况。