正确的删除方法是什么全部目录的内容,没有说目录?
例如,我有以下目录结构:
foo/
bar1/
bar2/
x.txt
我想删除文件夹bar1
和bar2
文件x.txt
,不删除 foo
。
另请考虑带有可能被忽略或引发错误的特殊字符的文件名。
编辑#1(9 月 30 日,18:26 UTC):
我认为我的问题不是重复的这个问题,因为我要求删除一切在目录内,而另一个问题没有,答案也不包含这样的解决方案。
答案1
如果您知道可以使用以下命令之一执行的目录:
$ find foo/* -delete
$ rm -fr foo/*
$ find foo/* -exec rm -fr {} +
如果您的文件以点 ( .
) 开头,那么您将需要rm
.
$ rm -fr foo/{*,.*}
例子
$ ls -l foo
drwxrwxr-x 6 saml saml 4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir1
drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir2
drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir space1
drwxrwxr-x 2 saml saml 4096 Sep 27 09:43 dir space2
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 .dot space1
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 .dot space2
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file1
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file2
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file space1
-rw-rw-r-- 1 saml saml 0 Sep 27 09:43 file space2
$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$
$ ls -l foo/
total 0
$
使用新的文件目录重复:
$ find foo/* -delete
$
处理特殊字符
如果你有一个名为foo tastic
有空格的目录,你可以引用它,但仍然使用通配符:
例子
$ rm -fr "foo tastic"/*
特殊字符
在运行文件名混合物之前,我经常使用这个技巧来查看 shell 对它们的看法。在我上面使用的示例目录中:
$ ls -1 "文件"* 文件空间1 文件空间2
$ ls -1d“dir”* 目录空间1 目录空间2
通过事先进行这些测试,您可以了解使用包含 glob 的命令时将使用哪些文件/目录。