执行sudo rm -r /路径/*删除目录现有内容却报‘No such file or directory’的问题咨询
嘿,我来帮你捋捋这个问题,你遇到的情况其实挺常见的,核心原因和权限以及shell通配符的展开逻辑有关:
首先,当你输入sudo rm -r /opt/atlassian/jira/work/*时,你的普通用户shell会先尝试解析*这个通配符,但你作为普通用户大概率没有访问/opt/atlassian/jira/work目录的权限,导致*无法被替换成目录里的实际内容(比如那个Catalina子目录),所以rm收到的是字面意义上的/opt/atlassian/jira/work/*路径,自然会提示“找不到文件或目录”。这里要注意:sudo只是给rm命令提升了权限,并没有让shell在root权限下展开通配符,这就是问题的关键。
给你几个实用的解决方案,选哪个都能解决问题:
方法一:让root shell处理通配符
直接用sudo调用shell执行删除命令,这样通配符会在root权限下被正确展开:sudo sh -c 'rm -r /opt/atlassian/jira/work/*'这里的
sh -c会让root环境的shell先把*解析成work目录里的所有内容,再交给rm去删除,既不会报错,也不会删掉work目录本身。方法二:切换到root交互式shell操作
如果觉得上面的命令有点绕,可以先切换到root的交互式shell,再一步步操作,更直观:sudo -s cd /opt/atlassian/jira/work rm -r * exit # 操作完成后退出root环境所有步骤都在root权限下执行,完全不会有通配符无法展开的问题。
方法三:用find命令安全删除
要是担心误操作,推荐用find命令精准删除目录内的内容(自动排除目录本身):sudo find /opt/atlassian/jira/work -mindepth 1 -delete-mindepth 1表示只处理work目录下的子内容,绝对不会碰work目录本身,安全性拉满,适合对命令不太熟悉的场景。
另外补充下,你之前用sudo rm -r /opt/atlassian/jira/work/会删掉work目录,是因为你直接指定了目录本身,rm -r会递归删除整个目录结构,所以一定要注意路径的写法,或者用上面的方法来只删内容不删目录。
备注:内容来源于stack exchange,提问作者Richard

