Tente file
então file -k
entãodos2unix -ih
file
normalmente será suficiente. Mas, para casos difíceis, tente file -k
ou dosunix -ih
.
Detalhes abaixo.
Experimentar file -k
Versão curta: file -k somefile.txt
vou te dizer.
- Ele produzirá
with CRLF line endings
para terminações de linha do DOS / Windows.
- Ele produzirá
with LF line endings
para terminações de linha MAC.
- E para a linha "CR" do Linux / Unix, ela apenas produzirá
text
. (Portanto, se ele não mencionar explicitamente nenhum tipo line endings
, isso significa implicitamente: "finais de linha CR" .)
Versão longa, veja abaixo.
Exemplo do mundo real: codificação de certificado
Às vezes, tenho que verificar isso em busca de arquivos de certificado PEM.
O problema com o regular file
é o seguinte: às vezes, ele tenta ser muito inteligente / muito específico.
Vamos tentar um pequeno teste: eu tenho alguns arquivos. E um desses arquivos possui finais de linha diferentes. Qual?
(A propósito: é assim que um dos meus diretórios típicos de "trabalho de certificado" se parece.)
Vamos tentar regularmente file
:
$ file -- *
0.example.end.cer: PEM certificate
0.example.end.key: PEM RSA private key
1.example.int.cer: PEM certificate
2.example.root.cer: PEM certificate
example.opensslconfig.ini: ASCII text
example.req: PEM certificate request
Hã. Não está me dizendo os finais da linha. E eu já sabia que eram arquivos cert. Eu não precisava de "arquivo" para me dizer isso.
O que mais você pode tentar?
Você pode tentar dos2unix
com a --info
opção assim:
$ dos2unix --info -- *
37 0 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
Então isso diz a você que: sim, "0.example.end.cer" deve ser o homem estranho. Mas que tipo de finais de linha existem? Do que você sabe o formato de saída dos2unix de cor? (Eu não.)
Mas, felizmente, existe a opção --keep-going
(ou -k
abreviada) em file
:
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text, with CRLF line terminators\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
Excelente! Agora sabemos que nosso arquivo ímpar possui CRLF
terminações de linha DOS ( ). (E os outros arquivos têm LF
finais de linha Unix ( ). Isso não está explícito nesta saída. Está implícito. É exatamente assim que se file
espera que um arquivo de texto "regular" seja.)
(Se você quiser compartilhar meu mnemônico: "L" é para "Linux" e "LF".)
Agora vamos converter o culpado e tentar novamente:
$ dos2unix -- 0.example.end.cer
$ file --keep-going -- *
0.example.end.cer: PEM certificate\012- , ASCII text\012- data
0.example.end.key: PEM RSA private key\012- , ASCII text\012- data
1.example.int.cer: PEM certificate\012- , ASCII text\012- data
2.example.root.cer: PEM certificate\012- , ASCII text\012- data
example.opensslconfig.ini: ASCII text\012- data
example.req: PEM certificate request\012- , ASCII text\012- data
Boa. Agora todos os certificados têm finais de linha Unix.
Experimentar dos2unix -ih
Eu não sabia disso quando estava escrevendo o exemplo acima, mas:
Na verdade, acontece que o dos2unix fornecerá uma linha de cabeçalho se você usar -ih
(abreviação de --info=h
) assim:
$ dos2unix -ih -- *
DOS UNIX MAC BOM TXTBIN FILE
0 37 0 no_bom text 0.example.end.cer
0 27 0 no_bom text 0.example.end.key
0 28 0 no_bom text 1.example.int.cer
0 25 0 no_bom text 2.example.root.cer
0 35 0 no_bom text example.opensslconfig.ini
0 19 0 no_bom text example.req
E outro momento "realmente": o formato do cabeçalho é realmente fácil de lembrar: Aqui estão duas mnemônicas:
- É DUMB (da esquerda para a direita: d para Dos, u para Unix, m para Mac, b para BOM).
- E também: "DUM" é apenas a ordem alfabética de D, U e M.
Leitura adicional
man less
,.