![在查找名稱中包含給定子句的所有文件](https://rvso.com/image/1127609/%E5%9C%A8%E6%9F%A5%E6%89%BE%E5%90%8D%E7%A8%B1%E4%B8%AD%E5%8C%85%E5%90%AB%E7%B5%A6%E5%AE%9A%E5%AD%90%E5%8F%A5%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.png)
這是一個普遍的問題,但我的情況是我已經安裝了(我相信它已經安裝了!)gcc arm編譯器,但我在系統中的任何地方都找不到它。我嘗試了下面的命令,但它幾乎返回任何內容
$sudo find . -print | grep -i '.*[arm]'
我相信我正在尋找的文件名稱中可能包含以下子句:
gcc, arm, eabi, 4.8, ....
最好的搜尋詞是什麼?
答案1
您可以使用-name
或-iname
開關find
代替grep
pingfind
的輸出;您還可以將搜索範圍縮小到文件,如果您不知道它可能安裝在哪裡,您最好在其中進行搜索,/
而不是在當前工作目錄中進行搜索:
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 ...
:搜尋正規表示式。您只需要基本名稱,而不是整個部分,因此我們必須排除/
至少一個斜杠後面的斜杠 ()。