
Por favor, alguém tem uma ideia sobre a saída deste comando, pesquisei muito sobre isso no Google, mas não consigo encontrar nada útil
find . -type f -exec grep -H PATH {} \;
desde já, obrigado
Responder1
O comando
find . -type f -exec grep -H PATH {} \;
encontra todos os arquivos regulares ( -type f
) no diretório atual ( .
) ou abaixo, e para cada um desses arquivos é executado grep -H PATH {}
substituído {}
pelo nome do caminho completo do arquivo relativo ao diretório atual.
A -H
opção para grep
não é padrão, mas é frequentemente implementada e garante que cada linha correspondente seja prefixada pelo nome do caminho do arquivo em que a linha foi encontrada. Você pode alterar o comando para grep PATH /dev/null {}
em vez de forçar grep
a saída sempre do nome do caminho do arquivo que contém as linhas correspondentes (o padrão grep
faz isso quando pelo menos dois arquivos são fornecidos na linha de comando).
O padrão usado grep
é a string PATH
.
Para resumir: O comando encontra e gera todas as linhas de todos os arquivos regulares no diretório atual ou abaixo, que mencionam a substring PATH
em qualquer lugar. Cada linha é prefixada pelo nome do caminho do arquivo que contém a linha.
Um trecho da saída que obtenho ao executar isso em meu diretório pessoal:
./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
O comando poderia se tornar mais eficiente permitindo grep
a execução de tantos arquivos quanto possível de uma vez, em lotes, em vez de uma vez para cada arquivo:
find . -type f -exec grep -F -e PATH /dev/null {} +
Também tomei a liberdade de alterar grep
um pouco o comando aqui, adicionando -F
para que ele trate a string PATH
como umcordaem vez de uma expressão regular. A -e
opção é usada apenas para indicar que o próximo argumento é o padrão (útil se o padrão for posteriormente alterado para algo que pode começar com um travessão, por exemplo).
É a mudança de \;
para +
no final do -exec
argumento do predicado que faz com que ele colete os nomes de caminho encontrados em lotes, em vez de executar o utilitário para cada um deles.