查找名称中包含给定子句的所有文件

查找名称中包含给定子句的所有文件

这是一个常见问题,但我的情况是,我已经安装了(我相信它已经安装了!)gcc arm 编译器,但我在系统中找不到它。我尝试了下面的命令,但它几乎返回任何内容。

$sudo find . -print | grep -i '.*[arm]'

我相信我正在寻找的文件名称中可能包含以下子句:

gcc, arm, eabi, 4.8, ....

最佳搜索词是什么?

答案1

您可以使用-name-iname开关来find代替greppingfind的输出;您也可以将搜索范围缩小到文件,如果您不知道它可能安装在哪里,那么您最好在/而不是在当前工作目录中进行搜索:

sudo find / -type f -name "*gcc*" -o -name "*arm*" -o -name "*eabi*" -o -name "*4.8*"

按照你的评论,您使用 PPA 安装了它,因此如果可执行文件已添加到您的路径中,您应该能够通过运行来确定它的位置which arm-none-eabi-gcc;如果没有,运行sudo find / -type f -name "*arm-none-eabi-gcc*",它应该能够找到它。

答案2

我安装了该软件包并运行: 。结果是一个文件列表,其中最相关的是所有以 开头的dpkg-query -L gcc-arm-none-eabi文件数。我认为这些就是您要查找的文件。/usr/bin/arm-none-eabi

    $ls /usr/bin/arm-none-eabi*
/usr/bin/arm-none-eabi-addr2line   /usr/bin/arm-none-eabi-gcov
/usr/bin/arm-none-eabi-ar          /usr/bin/arm-none-eabi-gdb
/usr/bin/arm-none-eabi-as          /usr/bin/arm-none-eabi-gprof
/usr/bin/arm-none-eabi-c++         /usr/bin/arm-none-eabi-ld
/usr/bin/arm-none-eabi-c++filt     /usr/bin/arm-none-eabi-ld.bfd
/usr/bin/arm-none-eabi-cpp         /usr/bin/arm-none-eabi-nm
/usr/bin/arm-none-eabi-elfedit     /usr/bin/arm-none-eabi-objcopy
/usr/bin/arm-none-eabi-g++         /usr/bin/arm-none-eabi-objdump
/usr/bin/arm-none-eabi-gcc         /usr/bin/arm-none-eabi-ranlib
/usr/bin/arm-none-eabi-gcc-4.9.3   /usr/bin/arm-none-eabi-readelf
/usr/bin/arm-none-eabi-gcc-ar      /usr/bin/arm-none-eabi-size
/usr/bin/arm-none-eabi-gcc-nm      /usr/bin/arm-none-eabi-strings
/usr/bin/arm-none-eabi-gcc-ranlib  /usr/bin/arm-none-eabi-strip

答案3

find命令应该可以工作:

find . -executable -type f -regex '.*\/[^\/]*\(gcc\|arm\|eabi\|4\.8\)[^\/]*'

解释:

  • -executable:仅匹配设置了可执行位的文件。
  • -type f:仅匹配常规文件。
  • -regex ...:搜索正则表达式。您只需要基本名称,而不是整个部分,因此我们必须排除/至少一个斜杠后面的斜杠 ( )。

相关内容