rm -rf /some/path/*
删除该目录(和子目录)中的所有非隐藏文件。
rm -rf /some/path/.*
删除该目录中的所有隐藏文件(但不包括子目录),并给出以下错误/警告:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
.
在不收到有关 和的警告/错误的情况下递归删除目标目录中的所有隐藏和非隐藏文件和文件夹的正确方法是什么..
?
答案1
*
匹配所有非点文件,.[!.]*
匹配除.
和 名称以 开头的文件之外的所有点文件..
,并..?*
匹配除..
.它们一起匹配除.
和之外的所有文件..
。如果这三种模式中的任何一个都不匹配,它就会扩展到自身;rm -f
不关心不存在的参数,所以这并不重要。
rm -rf -- ..?* .[!.]* *
您也可以使用find
.这更复杂,但具有即使文件太多以至于上面的通配符会超出系统命令行长度限制也能工作的优点。
find . -name . -o -prune -exec rm -rf -- {} +
您可能会发现删除并重新创建目录会更清晰。即使另一个程序同时在原始目录中创建文件,这样做的优点(或缺点,视情况而定)会导致空目录。
答案2
您可以随时将错误消息发送至/dev/null
rm -rf /some/path/.* 2> /dev/null
你也可以只是
rm -rf /some/path/
mkdir /some/path/
...那么您一开始就不必担心隐藏文件。
答案3
刚刚意识到这是大多数 Linux 发行版中最方便的方法:
ls -A1 | xargs rm -rf
在哪里
-A
= 列出所有内容除了 .
和..
-1
= 将每个项目放在一行中
答案4
这应该像@吉尔斯答案但更紧凑:
rm -rf {,.[!.],..?}*
或者
rm -rf dir/to/files/{,.[!.],..?}*
if
为了安全起见,还应该在脚本中添加for 使用:
if [ -d "$DIR" ]; then
rm -rf ${DIR}/{,.[!.],..?}*
fi