如何防止 find -execdir 跟随符号链接?

如何防止 find -execdir 跟随符号链接?

假设我有一个符号链接:

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 系统调用无法更改其权限

您到底想对符号链接做什么?

相关内容