Eu sei que posso encontrar arquivos usando find
: find . -type f -name 'sunrise'
. Resultado de exemplo:
./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise
Eu também sei que posso determinar o tipo de um arquivo de arquivo: file sunrise
. Resultado de exemplo:
sunrise: PEM RSA private key
Mas como posso encontrar arquivos por tipo de arquivo?
Por exemplo my-find . -type f -name 'sunrise' -filetype=bash-script
:
./astronomy/sunrise
./schedule/sunrise
files
find
file-command
file-types
Fluxo
fonte
fonte
--filetype
opção para o comando find ou qualquer outra coisa que informe o tipo de arquivo. A única coisa que você pode fazer é usar--exec file {} \;
e canalizá-logrep Bourne
se você estava procurando por scripts bash ougrep Perl
se estava procurando por scripts Perl ou algo nesse sentido.Respostas:
"Tipos de arquivos" em um sistema Unix são coisas como arquivos regulares, diretórios, pipes nomeados, arquivos especiais de caracteres, links simbólicos etc. Esses são os tipos de arquivos que
find
podem ser filtrados com sua-type
opção.O
find
utilitário não pode, por si só, distinguir entre um "shell script", "arquivo de imagem JPEG" ou qualquer outro tipo de arquivo comum . No entanto, esses tipos de dados podem ser diferenciados pelofile
utilitário, que analisa assinaturas específicas nos próprios arquivos para determinar seu tipo.Uma maneira comum de rotular os diferentes tipos de arquivos de dados é pelo tipo MIME e
file
é capaz de determinar o tipo MIME de um arquivo.Usando
file
withfind
para detectar o tipo MIME de arquivos regulares e use-o para encontrar apenas scripts de shell:ou, usando
bash
,Adicione
-name sunrise
antes do-exec
se desejar detectar apenas scripts com esse nome.O
find
comando acima encontrará todos os arquivos regulares no diretório atual ou abaixo dele e, para cada arquivo, chame um pequeno shell script em linha. Este script é executadofile -bi
no arquivo encontrado e sai com um status de saída zero se a saída desse comando contiver a sequência/x-shellscript
. Se a saída não contiver essa sequência, ela sairá com um status de saída diferente de zero, o que fará com quefind
continue imediatamente com o próximo arquivo. Se o arquivo for considerado um shell script, ofind
comando continuará produzindo o nome do caminho do arquivo (-print
no final, que também pode ser substituído por alguma outra ação).O
file -bi
comando produzirá o tipo MIME do arquivo. Para um shell script no Linux (e na maioria dos outros sistemas), isso seria algo comoenquanto em sistemas com uma variante um pouco mais antiga do
file
utilitário, pode serO bit comum é a
/x-shellscript
substring.Observe que no macOS, você precisaria usá-lo em
file -bI
vez defile -bi
por motivos (a-i
opção faz algo bem diferente). A saída no macOS é semelhante à de um sistema Linux.Deseja executar alguma ação personalizada em cada script de shell encontrado, você pode fazer isso com outra
-exec
no lugar de-print
nosfind
comandos acima, mas também seria possível executarou, com
bash
,Relacionado:
fonte
Você pode executar
find
em todos os arquivos encontrados e depois grep pelo resultado em que está interessado.Sugiro que o padrão de pesquisa seja o mais próximo possível da sua expectativa de manter baixo o número de correspondências positivas positivas.
Cuidado que arquivos com novas linhas nos nomes de arquivos podem causar problemas com essa abordagem.
fonte
Usando
perl
oFile::LibMagic
módulo:fonte