如何打印使用共享库 (mylibrary) 的目录中的所有库?我试过:
ldd /usr/mt-60/apl/651/*.so |grep libmylibrary
但输出没有库名:
libmylibrary.so => /usr/aaa/libmylibrary.so (0x40017000)
libmylibrary.so => /usr/aaa/libmylibrary.so (0x40016000)
答案1
find /usr/mt-60/apl/651/*.so -exec sh -c 'ldd "$1" | grep -q libmylibrary' sh {} \; -print
诀窍-exec
也是 中的测试find
。在这种情况下,它测试 的退出状态sh
是 的退出状态grep
;因此,-print
只有grep
找到任何内容时才会起作用。
笔记:
- 我们需要
sh
内心使内管工作。 - 这里所有路径都以 开头
/usr/mt-60/apl/651/
,因此不会有看起来像选项的路径(例如-L
)。一般来说,如果有这样的路径,您可能希望使用find -- …
和。如果您的模式以或或文字开头,这将是相关的(处理这种不方便的模式的另一种方法是将其添加到前面)。ldd -- …
*
?
-
./
通配符
*
由(外部)外壳扩展,一般在find
之前会获得多个参数-exec
。这可能导致argument list too long
(或no such file or directory
如果没有匹配)。因此,您可能需要find
进行匹配:find /usr/mt-60/apl/651/ -type f -name "*.so" …
哪里
*
不是由于被引用,因此由 shell 展开。请注意,此方法是递归的(请调查-maxdepth
或参阅这个问题如果这是个问题的话)。- 忽略
-q
以查看输出grep
前相应文件的路径。