【问题标题】:Chmod of Symlinked Files符号链接文件的 Chmod
【发布时间】:2021-02-28 05:53:13
【问题描述】:

最近我尝试访问符号链接文件,但收到“拒绝访问”。所以我想要一种方法来更改所有符号链接的目标文件。有一种方法可以在 chown 中执行此操作(即 sudo chmod -R 775 /var/www/),但不是 chmod。很奇怪。有没有人有更好的方法来做到这一点:

ls -lR /var/www/ | grep ^l | awk '{print $11, $12, $13, $14}' | sed -e 's/[[:space:]]*$//' | sed 's/.*/"&"/' | xargs -n 1 sudo chmod 775

  • ls -lR /var/www/ 查找 /var/www 中的所有文件
  • grep -l 过滤掉所有的符号链接文件
  • awk {print $11, $12, $13, $14} 打印所有文件,包括带有空格的文件(更多的空格包含更多的数字)
  • sed -e 's/[[:space:]]*$//' 通过在 awk 中包含空格来删除剩余的尾随空格
  • sed 's/.*/"&"/' 在每个文件周围添加引号以包含目录中带有空格的文件
  • xargs -n 1 sudo chmod 775 对找到的所有文件执行 chmod 功能

【问题讨论】:

  • 这里的奇数是什么?
  • 请注意:Why not parse ls?
  • 改用find /var/www -type l -exec chmod 0775 {} \; 可能更容易
  • 你想改变链接的权限,或者它指向的文件?
  • @beepbeep 在 Ubunutu 系统上我刚刚测试过“chmod”更改了真实文件的权限,而不是符号链接。您是否尝试更改符号链接的权限?

标签: linux bash awk sed


【解决方案1】:

如果链接名称中有空格,您的awk 可能会失败。

与其尝试将其全部放入管道中,不如使用简单的循环:

find /var/www -type l -print0 | while IFS= read -r -d link ; do
   rp=$(realpath "$link")
   chmod 775 "$rp"
done

如果你一定要解析ls的输出,那么

ls -lR | sed -n 's/^l.* -> //p' | sed 's/.*/"&"/'

可能会给您比grep-awk 管道更好的选择

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2018-09-02
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多