Impede que o gato abra um arquivo binário

2

Existe uma maneira de prevenir ou avisar ao tentar cat arquivos binários?

Muitas vezes eu preciso trabalhar com arquivos de log ou arquivos de dados, alguns dos quais são textos e outros não. É fácil se confundir, e acidentalmente tentar cat um arquivo binário é chato por razões óbvias.

O ideal é que eu queira um alias para cat que irá perguntar se ele detecta que um arquivo é (com alta probabilidade) não texto simples.

    
por bobdole 17.03.2015 / 16:46

4 respostas

0

Eu realmente acho que isso não vale a pena quando você pode verificar antes de cat ing algo, mas você pode configurar uma função em seu ~/.bashrc para fazer isso:

cat(){
    for i in "$@"
    do
        if  file --mime "$i" | grep "charset=binary" >/dev/null 
        then
            printf "File %s is binary, skipping\n" "$i" >&2
        else
            /bin/cat "$i"
        fi
    done
}

Isso executará file para verificar se o tipo mime do arquivo é charset=binary e, em caso afirmativo, irá ignorá-lo. Se esse teste falhar, o arquivo não será binário e /bin/cat será chamado. Você pode usá-lo como faria com o gato normal:

$ cat /bin/bash /etc/os-release
File "/bin/bash" is binary, skipping
PRETTY_NAME="Linux Mint LMDE"
NAME="Linux Mint LMDE"
ID=linuxmint
ANSI_COLOR="1;31"
    
por 17.03.2015 / 17:17
2

Além do que disse aqui , você pode simplesmente use less em vez de cat .

Ele avisa se o arquivo não é regular, e dá um pouco mais como, por exemplo, a lista dos arquivos em um zip, arquivo rar ...

A propósito, você pode usar até mesmo cat -v que transformará caracteres sem leitura sem adicionar $ ao final de cada linha.

    
por 17.03.2015 / 17:32
2

Se você chamar file com -i , ele retornará o tipo MIME, permitindo que você determine se é texto ou não.

file -i file.name | grep text/ && cat file.name

se file.name for binário, o && não executará o cat e, se for seu texto simples, então.

Isso agora corresponde ao script e outros arquivos de "texto" que não estão marcados como "simples"

    
por 17.03.2015 / 17:02
-1

Salve isso como um script, por exemplo newcat.sh , e torne-o executável:

#!/bin/bash
result='file $1 | grep -c "binary"'
if [ "$result" -gt 0 ]
then
    echo "executable file"
else
        cat $1
fi

use-o como ./newcat.sh filename

    
por 17.03.2015 / 17:12

Tags