
Пожалуйста, есть ли у кого-нибудь идеи о выводе этой команды? Я много гуглил об этом, но ничего полезного не нашел.
find . -type f -exec grep -H PATH {} \;
заранее спасибо
решение1
Команда
find . -type f -exec grep -H PATH {} \;
находит все обычные файлы ( -type f
) в текущем каталоге ( .
) или ниже и для каждого такого файла выполняет команду grep -H PATH {}
с {}
заменой на полный путь к файлу относительно текущего каталога.
Параметр -H
to grep
нестандартен, но часто реализуется и гарантирует, что каждая совпадающая строка будет предваряться путем к файлу, в котором она была найдена. grep PATH /dev/null {}
Вместо этого вы можете изменить команду на , чтобы принудительно grep
всегда выводить путь к файлу, содержащему совпадающие строки (стандартно grep
это происходит, когда в командной строке указано не менее двух файлов).
В качестве шаблона используется grep
строка PATH
.
Подведем итог: команда находит и выводит все строки из всех обычных файлов в текущем каталоге или ниже, которые упоминают подстроку PATH
где-либо. Каждая строка предваряется путем к файлу, содержащему строку.
Фрагмент вывода, который я получаю при запуске этого в моем личном домашнем каталоге:
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_NM:FILEPATH=/usr/bin/nm
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_STRIP:FILEPATH=/usr/bin/strip
Команду можно сделать более эффективной, если разрешить ее grep
запуск для максимально возможного количества файлов одновременно, пакетами, а не по одному разу для каждого файла:
find . -type f -exec grep -F -e PATH /dev/null {} +
Я также взял на себя смелость немного изменить grep
команду, добавив, -F
чтобы она обрабатывала строку PATH
какнитьа не как регулярное выражение. Опция -e
просто используется для указания того, что следующим аргументом является шаблон (полезно, если шаблон позже будет изменен на что-то, что может начинаться с тире, например).
Изменение с \;
на +
в конце -exec
аргумента предиката заставляет его собирать найденные пути в пакеты вместо того, чтобы запускать утилиту для каждого из них.