显而易见的解决方案是产生退出代码 1:
bash$ rm -rf .*
rm: cannot remove directory `.'
rm: cannot remove directory `..'
bash$ echo $?
1
一个可能的解决方案是跳过“。”和“..”目录,但只会删除名称长度超过 3 个字符的文件:
bash$ rm -f .??*
答案1
rm -rf .[^.].??*
应该可以捕获所有情况。.??*
仅匹配 3 个以上字符的文件名(如上一个答案中所述),.[^.]
可以捕获任何两个字符的条目( 除外..
)。
答案2
find -path './.*' -delete
这将匹配当前目录中所有以 开头的文件,.
并递归删除这些文件。非隐藏目录中的隐藏文件不受影响。
如果你真的想擦掉一切从目录中find -delete
获取就足够了。
答案3
最好的方法可能是:
- 查找 . -iname .* -maxdepth 1 -type f -exec rm {} \;
改变R M到ls -l如果你只是想看看会删除什么,为了详细显示输出,你可能需要添加-v选择R M
- -类型 f选项告诉寻找仅查找文件的命令(省略目录、链接等)
- -最大深度 1告诉寻找不要进入子目录
附言:不要忘记以 '\;' 结尾
答案4
ls -la | awk '$NF ~ /^\.[^.]+/ {print $NF}' | xargs rm -rf
ls -la ............. long list (all files and folders)
$NF ................ last field (file or folder name)
~ ................ Regular Expression match
/^\.[^.]+/ ......... dot followed by not dot at least once +
If the last field $NF match pattern show it and send
it to xargs which will perform the task.