ojb*_*ass 12 unix command-line-interface find
我认为我在使用 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 {} \;
Run Code Online (Sandbox Code Playgroud)
(如果结局是倒退的话,请原谅我……我一小时前看过它,但我仍然不确定)
但是由于挂载、符号链接等原因,我害怕运行它。我已经把 chmod .* 搞得一团糟,并且以前在我身上递归过。我知道 -xdev 会放弃交叉分区,但我不确定位于作为符号链接的目录中的文件会发生什么。
那么如何掌握这种可以杀死关键文件的野兽呢?
更新修剪下面的最佳建议并总结:
我对 print0 有点困惑,但 xargs 一直有点在我试图避免的乍一看不容易理解的练习上。
cha*_*aos 19
好吧,就-exec语法而言,您可以像很多人一样放弃并使用xargs:
find . -type f | xargs chown username
Run Code Online (Sandbox Code Playgroud)
(或带有空格和其他无意义的文件安全版本)
find . -type f -print0 | xargs -0 chown username
Run Code Online (Sandbox Code Playgroud)
或者,尝试记住用分号做正确的事情,您需要深入了解您正在使用分号来终止-exec正在运行的命令,并且您必须转义分号,因为它具有特殊性的意思bash。这就是为什么它是反斜杠分号的原因。你的{}替换部分似乎没问题。
至于杀死文件等,如果您正在运行像您所说的那样大而危险的东西,请先执行以下操作:
find . -type f -exec echo chown username {} \;
Run Code Online (Sandbox Code Playgroud)
并审查结果。这基本上是一个“试运行”,您将看到如果您允许它会运行的命令。绝对是一个好习惯。不会帮助解决这个.*问题,但你知道现在不要这样做。:)
| 归档时间: |
|
| 查看次数: |
7785 次 |
| 最近记录: |