首先,我对此很陌生,所以如果这是非常基本的或者我听起来过于不了解,请原谅我。
我想检查我的 VPS 上特定目录中的所有文件,以确保文件为 644,目录为 755。FTP 是不可能的,因为文件/目录太多了。SSH 似乎是最合乎逻辑的选择,但在我转到 chmod 权限之前,我想看看我将要更改的内容。有没有办法查找和显示不符合此条件的文件/目录?
提前感谢您的任何见解。
Chr*_*rel 11
作为对 David Spillett 答案的改进,如何使用单个 find 命令?我认为它比所有管道都干净一点,并调用 grep。此外,它减少了一些可能会爆炸的边缘情况。
find . -type f ! -perm 644应该找到每个没有 -rw-r--r-- 权限的文件。对于目录,您可以使用find . -type d ! -perm 755.
一旦您对所看到的感到满意,您甚至可以将 chmod 组合到同一个命令中:
find . -type f ! -perm 644 -exec chmod 644 {} \;
find . -type d ! -perm 755 -exec chmod 755 {} \;
find . -type f | xargs ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)
“寻找当前目录下的所有文件,传递到‘ls -l命令’列出他们的细节,扫描输出ls的所有行不(-v选项的grep否定匹配)含有” RW-R - R- -" 和目录:
find . -type d | xargs ls -l | grep -v drw-r--r--
Run Code Online (Sandbox Code Playgroud)
如果要扫描另一个目录,请替换“.” 与它,例如:
find /path/to/directory -type f | xargs ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)
如果某些文件/目录名称可能包含空格,请在 find 和 xargs 中使用“使用 0 分隔的字符串”选项以避免错误:
find . -type f -print0 | xargs -0 ls -l | grep -v rw-r--r--
Run Code Online (Sandbox Code Playgroud)
此外,您还可以删除-v从grep的选项来查找文件/目录做,如果你想列出这些作为一个全面的检查匹配。
find默认情况下,使用也会扫描子目录。要仅扫描一个目录而不是其子目录,您可以ls -l通过管道传输throughgrep而不是使用findand xargs。
当您运行时chmod请记住,您可以指定该-v选项,以便它会列出它在执行操作时所做的和不更改的内容 - 这对于让自己确信您给出了正确的命令很有用。
| 归档时间: |
|
| 查看次数: |
12396 次 |
| 最近记录: |