假设我有一个符号链接:
linktob -> b
如果我运行类似的命令find . -type l -execdir chmod 777 {} \;
,该chmod
命令会影响符号链接指向的文件,即“b”。
手册页表明默认情况下不遵循符号链接,但这里的情况似乎并非如此。
我怎样才能让-execdir
等-exec
处理符号链接本身?
答案1
从这个例子中你可以看到该find
命令做实际上对符号链接进行操作:
$ ls -l *
subdir1:
total 0
-rwxrwxrwx 1 nate nate 0 Jun 13 09:20 realfile
subdir2:
total 0
lrwxrwxrwx 1 nate nate 19 Jun 13 09:20 symlinkfile -> ../subdir1/realfile
$ find . -type l -exec ls "{}" \;
./subdir2/symlinkfile
但底层命令(例如chmod
)可能不会。在这个例子中,我们可以看到 chmod 实际上是改变了目标文件:
$ find . -type l -exec chmod -v 777 "{}" \;
mode of `./subdir2/symlinkfile' retained as 0777 (rwxrwxrwx)
$ find . -type l -exec chmod -v 444 "{}" \;
mode of `./subdir2/symlinkfile' changed from 0777 (rwxrwxrwx) to 0444 (r--r--r--)
$ ls -l *
subdir1:
total 0
-r--r--r-- 1 nate nate 0 Jun 13 09:20 realfile
subdir2:
total 0
lrwxrwxrwx 1 nate nate 19 Jun 13 09:20 symlinkfile -> ../subdir1/realfile
从 chmod 手册页:
chmod 永远不会更改符号链接的权限; chmod 系统调用无法更改其权限
您到底想对符号链接做什么?