在具有相对路径的文件中查找字符串

在具有相对路径的文件中查找字符串

我不明白为什么这两个命令没有提供相同的结果(区别仅在于相对路径与绝对路径),有人可以解释一下吗?

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() {

在第二种情况下,没有找到第二个匹配项

更新-证明路径中没有符号链接:

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

答案1

本质上这就是问题所在;您执行查找的目录是符号链接;因此相对移动 .. 不会将您移动到您期望的位置;而是移动到 ..$(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

很酷的工具来确定一些文件的真实路径

$ readlink -f some_name

或者用 namei 检查一些路径是如何与例如链接的

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

上面的例子不包含路径上的符号链接,但是如果有的话,它会详细地显示某些文件的真实路径,而没有符号链接的疯狂。

相关内容