O que estou tentando fazer?
Escreva um comando que procure por arquivos que não estejam sendo solicitados por nenhum outro arquivo no meu projeto.
O que eu tentei?
Estou usando find
para obter uma lista de nomes de arquivos. Agora eu quero usar os nomes de arquivo como a string de pesquisa (em vez do arquivo a ser pesquisado).
Estou usando find server/lib -type f -exec basename {} \; | cut -f 1 -d '.'
para obter minha lista de nomes de arquivos e remover a extensão do arquivo.
Agora eu sei que grep -R --exclude-dir=node_modules <search-string> . -l
é nisso que eu quero canalizar cada nome de arquivo, mas não sei como passá-los como <search-string>
argumento.
Outras informações
Também estou vagamente ciente de que a canalização para isso grep
pode passar o resultado inteiro do find
(toda a lista de arquivos) que obviamente não quero fazer, se é isso que estou prestes a fazer, então me diga.
Além disso, (embora isso provavelmente não esteja no escopo desta pergunta), como eu estou usando isso como uma maneira de encontrar qualquer um dos nomes de arquivos que grep
não conseguem encontrar nada, qualquer conselho sobre como obter esse tipo de saída seria muito apreciado
> <the-command>
filename1
server/lib/foo.js # where these are the list of files in which it appears
test/lib/foo.js
filename2
Not Found! #where `filename2` wasn't found anywhere (obviously)
fonte
xargs -I {}
é o que eu estava procurando.Com
zsh
:**/
globbing recursivo. Um recurso introduzidozsh
no início dos anos 90.(D.:t:r)
é um qualificador global, umzsh
recurso específico que permite selecionar arquivos usando atributos diferentes de nome ou alterar a classificação ou fazer modificações nos arquivos encontrados.D
: inclua arquivos de ponto e dirija pontos-dirs comofind
faria. Provavelmente, você gostaria de tirar isso..
: apenas arquivos regulares (como-type f
emfind
):t
,:r
: modificadores de histórico como emcsh
/bash
mas aqui aplicados aos arquivos globbed.:t
para a cauda (nome da base),:r
para o nome da raiz (extensão removida).x${^array}
distribui os elementos comorc
'sx^$array
oufish
' sx$array
faria. Por exemplo, se$array
for (1
,2
). Isso se tornax1
x2
.${(u)array}
(por exemplou
), remova duplicatas ((u)
sendo um sinalizador de expansão de parâmetro).Para a lista de arquivos que não contêm nenhuma das strings, substitua
-l
por-L
(assumindo o GNUgrep
, mas você já está usando opções específicas do GNU aqui).-F
é para pesquisa de string fixa (como você provavelmente não deseja que esses nomes de projetos sejam tratados como regexps). Você também pode querer ativar uma-w
opçãogrep
para correspondência de palavras , para quefoo
não corresponda,foobar
por exemplo (ainda assim corresponderiafoo-bar
).fonte
projects=(server/lib/**/*(D.:t:r))
produção de uma matriz como essa no zsh. No entanto, agora preciso listar os arquivos ondegrep
não foi possível encontrar nada. Eu acho que precisaria pegar um código de saída 0 / falso?-L
no final da resposta-l
informa onde está o resultado da pesquisa e-L
indica onde não foi encontrado. Mas eu quero saber uma lista das buscas-termos que não foram encontrados em qualquer lugar, em vez de onde eles foram / não foram encontrados