我觉得我在使用find方面相当先进,但每次使用它我都不能为我的生活记住关闭-exec选项的方法.每次使用它都会花很多时间阅读.我只是没有充分利用它或期望自己太多吗?让我们从一个让我感到沮丧的典型例子开始.
目录结构具有所有不正确权限的文件隐藏文件符号链接等.我想将所有权更改为合理的值
find . -type f -exec chown username {} \; find . -type d -exec chown username {} \; find . -type d -exec chgrp usergroup {} \; find . -type f -exec chgrp usergroup {} \;
(请原谅我,如果结局是倒退的……我一小时前看过它,但我仍然不确定)
但我害怕因为坐骑,象征性的链接等而运行它.我已经做了chmod的最终蠢事.*并且让它在我之前向前冲.我知道-xdev会放弃跨越分区,但我不确定生活在符号链接目录中的文件会发生什么.
那么如何掌握这种可以杀死关键文件的野兽呢?
更新修剪下面的最佳建议并总结:
>将练习目录链接并挂载到其他练习目录.
>使用xargs而不是非直观的exec命令.
>使用-exec echo {}来保证理智和安全
>半冒号是特殊的,你正在逃避它,因此逃生字符是第一个
> -or命令可以帮助您组合选择标准.
我对print0有点困惑,但xargs一直有点乍看之下不易理解,我试着避免.
好吧,就-exec语法而言,你可以做很多人,放弃并使用xargs:
find . -type f | xargs chown username
(或带有空格的文件和其他无意义的安全版本)
find . -type f -print0 | xargs -0 chown username
或者,为了尝试记住用分号做的正确的事情,你需要钻进脑袋的是你使用分号来终止-exec正在运行的命令,你必须转义分号,因为它对bash有特殊意义.这就是为什么它是反斜杠分号.你似乎有{}替换部分没问题.
至于杀死文件等等,如果你正在运行像你所说的大而危险的东西,首先要这样做:
find . -type f -exec echo chown username {} \;
并审查结果.这基本上是一个“干运行”,你可以看到它运行的命令.绝对是一个很好的做法.对.*问题没有帮助,但你知道现在不要那么做.