? no final dos arquivos ao listar o arquivo usando 'ls'

0

Ao listar arquivos usando o comando 'ls', recebo o seguinte.

-rw-rw-r-- 1 vineesh vineesh   2026 Nov 28 15:48 cdfg_ulit_89.txt?
-rw-rw-r-- 1 vineesh vineesh   1215 Nov 28 15:48 cdfg_ulit_8.txt?
-rw-rw-r-- 1 vineesh vineesh   1209 Nov 28 15:48 cdfg_ulit_90.txt?
-rw-rw-r-- 1 vineesh vineesh   3820 Nov 28 15:48 cdfg_ulit_9.txt?

O que isso significa?

    
por vineeshvs 28.11.2018 / 11:23

1 resposta

6

Quando a saída vai para um dispositivo terminal, a maioria das ls implementações se comportam como se a opção -q tivesse sido passada para elas.

Com -q , ls renderiza todos os caracteres não imprimíveis como ?

Aqui, possivelmente, o caractere não imprimível pode ser um caractere de retorno de carro (também conhecido como CR, também conhecido como \r ). Isso poderia acontecer, por exemplo, se você executasse xargs touch < file.txt e file.txt continha uma lista de nomes de arquivos, mas estivesse usando delimitadores de linha MS-DOS CR-LF (e sua implementação xargs como GNU xargs , mas ao contrário de busybox xargs não reconhece CR como um separador).

Também pode ser literalmente um caractere ? , pode até ser um ? seguido por espaço ou outros caracteres invisíveis (mas imprimíveis ).

Para confirmar qual caractere é, você pode canalizar essa saída para LC_ALL=C sed -n l .

ls -l | LC_ALL=C sed -n l

Em seguida, a saída ls será um canal (e, portanto, não será mais um dispositivo terminal), portanto, não ativará -q . Os caracteres não imprimíveis serão impressos como estão. sed -n l renderizará caracteres CR como \r e outros caracteres não imprimíveis usando representações imprimíveis apropriadas. Ele também adiciona um $ no final da linha para que você possa identificar caracteres de espaço à direita.

Com a implementação GNU de ls , você também pode usar algumas das opções --quoting-style=<STYLE> , como:

LC_ALL=C ls --quoting-style=shell-escape -l

Ou

LC_ALL=C ls -Ql

curto para:

LC_ALL=C ls --quoting-style=c -l
    
por 28.11.2018 / 11:36

Tags