在具有相对path的文件中查找string

我不明白为什么这两个命令不提供相同的结果(差别只是相对于绝对path),有人可以解释吗?

annika /srv/www/pages/com.example.www/www/povruc # find /srv/www/pages/com.example.www/www | xargs grep "datepicker()" 2>/dev/null /srv/www/pages/com.example.www/www/povruc/Application/Libraries/3rdParty/zebra/includes/Date.php: function disable_zebra_datepicker() { /srv/www/pages/com.example.www/www/js/functions.js: $(".datepicker").datepicker(); 

 annika /srv/www/pages/com.example.www/www/povruc # find ../ | xargs grep "datepicker()" 2>/dev/null ../povruc/Application/Libraries/3rdParty/zebra/includes/Date.php: function disable_zebra_datepicker() { 

在第二种情况下,找不到第二个匹配

更新 – certificatepath中没有符号链接:

 annika /srv/www/pages/com.example.www/www/povruc # namei -ml $(readlink -f $PWD) f: /srv/www/pages/com.example.www/www/povruc drwxr-xr-x root root / drwxr-xr-x root root srv drwxr-xr-x root root www drwxr-xr-x root root pages drwxrwx--- Wexampl001 root com.example.www drwxrwx--- Wexampl001 root www drwxrwx--- Wexampl001 root povruc 

本质上这是问题; 你从中find的目录是符号链接; 所以相对移动并没有把你移到你期望的地方; 而不是$(readlink -f $PWD)

 moo:~$ mkdir foo bar moo:~$ cd bar/ moo:~/bar$ ln -s ../foo/ moo:~/bar$ touch w00t moo:~/bar$ ls -1 foo w00t moo:~/bar$ cd foo moo:~/bar/foo$ ls -1 ../ bar foo 

很酷的utils来确定某个文件的真实path

$ readlink -f some_name

或者用namei检查一些path是如何链接的

$ namei -ml /etc/passwd f: /etc/passwd drwxr-xr-x root root / drwxr-xr-x root root etc -rw-r--r-- root root passwd

上面的例子不包含沿path的符号链接,但它有任何它会详细显示一些文件的真正path没有符号链接疯狂。