使用find-exec批量修改文件所有者失败问题求助
使用find-exec批量修改文件所有者失败问题求助
嗨,我来帮你搞定这个问题~
你遇到的报错原因很明确:给-exec后面的整个命令加了单引号!
find的-exec参数逻辑是这样的:它会把你写的内容拆分成「命令程序」+「参数」两部分,而你用单引号把chown shahnawaz:shahnawaz {}整个包起来后,find会误以为你要执行一个名为chown shahnawaz:shahnawaz /home/shahnawaz/file1的可执行文件——这显然不存在,所以才会报“没有这样的文件或目录”的错误。而你单独执行chown命令时没有加引号,shell能正确识别chown是命令、后面的是参数,所以能正常运行。
正确的命令写法
直接去掉引号就可以了:
sudo find ~/ -gid 1001 -exec chown shahnawaz:shahnawaz {} \;
如果要更高效(减少重复创建chown进程的次数),可以把末尾的\;换成+,这样find会把所有找到的文件一次性传给chown:
sudo find ~/ -gid 1001 -exec chown shahnawaz:shahnawaz {} +
额外优化建议
因为你的需求只是把文件的所属组改成你的主组,其实可以单独用chgrp命令,写法更简洁:
sudo find ~/ -gid 1001 -exec chgrp shahnawaz {} \;
同样,也可以换成+来提升效率。
另外确认一下:你用-gid 1001来匹配原属组已删除的文件是完全正确的,因为组被删除后,文件的组ID会保留原来的数值,这个匹配逻辑没问题。
备注:内容来源于stack exchange,提问作者Sk Shahnawaz-ul Haque
相关产品推荐
相关产品推荐

