![Найти все файлы, содержащие заданное предложение в своих именах](https://rvso.com/image/1127609/%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B2%D1%81%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%2C%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%89%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D1%81%D0%B2%D0%BE%D0%B8%D1%85%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B0%D1%85.png)
Это общий вопрос, но мой случай таков, что я установил (я верю, что он был установлен!) компилятор gcc arm, но я не могу найти его нигде в моей системе. Я попробовал команду ниже, но она возвращает почти все
$sudo find . -print | grep -i '.*[arm]'
Я полагаю, что файл, который я ищу, может иметь в своем названии следующие пункты:
gcc, arm, eabi, 4.8, ....
Какой поисковый запрос будет лучшим?
решение1
Вы можете использовать ключи или -name
вместо вывода ping ; также вы можете сузить поиск до файлов, и если вы не знаете, где он мог быть установлен, вам лучше поискать в , а не в том, который является вашим текущим рабочим каталогом:-iname
find
grep
find
/
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 ...
: поиск регулярного выражения. Вам нужны только базовые имена, а не целые части, поэтому нам нужно исключить слеши (/
) как минимум за одним слешем.