使用xargs与rm时遭遇权限问题:sudo应放置在何处?
问题出在sudo的作用范围!
你当前的命令sudo cat remove.txt | xargs rm里,sudo只作用于cat命令——也就是说,你只是用root权限读取了remove.txt,但后面的xargs rm还是以你的普通用户身份执行的!这就是为什么明明文件设了777权限,还是会弹出权限拒绝的提示(毕竟删除文件其实更多依赖的是文件所在目录的写入权限,而不是文件本身的权限,不过这里核心问题是rm没用到root权限)。
正确的做法:让sudo作用于rm命令
你只需要把sudo放到rm前面就行,这样xargs调用的rm会以root权限执行,具体命令是:
cat remove.txt | xargs sudo rm
如果remove.txt里的文件名包含空格或者特殊字符,更稳妥的写法是用-0参数避免解析错误:
cat remove.txt | tr '\n' '\0' | xargs -0 sudo rm
或者用xargs的-I参数(适合文件名带特殊字符的场景):
cat remove.txt | xargs -I {} sudo rm {}
额外提醒:为什么777权限还可能删不了?
就算用了sudo,如果你遇到还是删不掉的情况,可能是文件被设置了不可变属性(比如用chattr +i命令标记过),这时候需要先执行sudo chattr -i 文件名去掉属性再删除。不过你的问题核心还是sudo的位置不对,先调整命令位置应该就能解决。
内容的提问来源于stack exchange,提问作者Rusvi Kaos
相关产品推荐
相关产品推荐

