2

Есть ли способ, чтобы предотвратить или запросить вас при попытке cat двоичных файлов?

Часто мне нужно работать с файлами журналов или файлами данных, некоторые из которых являются текстовыми, а другие нет. Это легко запутаться, и случайные попытки cat двоичный файл раздражают по очевидным причинам.

В идеале я хотел бы, чтобы псевдоним cat опрашивал вас, если обнаружит, что файл (с высокой вероятностью) не является открытым текстом.

4 ответа4

2

Если вы вызовете file с параметром -i он вернет тип mime, что позволит вам определить, текст это или нет.

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

если file.name является двоичным, && не выполняет cat а если его обычный текст, то он выполняет.

Теперь это соответствует скрипту и другим "текстовым" файлам, которые не помечены как "простые"

2

В дополнение к тому, что здесь сказано, вы можете просто использовать less вместо cat .

Он запрашивает, не является ли файл обычным, и дает некоторый плюс, например, список файлов в архиве zip, rar ...

Кстати, вы можете использовать даже cat -v , который преобразует не читающие символы без добавления $ в конце каждой строки.

0

Я действительно не думаю , что это стоит, когда вы могли бы просто проверить , прежде чем cat ИНГ что - то, но вы можете настроить функцию в ~/.bashrc , чтобы сделать это:

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
}

Это запустит file чтобы проверить, является ли mime-тип файла charset=binary и, если это так, пропустит его. Если этот тест не пройден, файл не является двоичным и вызывается /bin/cat . Вы можете использовать его так же, как обычный кот:

$ 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"
-1

Сохраните это как скрипт, например, newcat.sh , и сделайте его исполняемым:

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

затем используйте его как ./newcat.sh filename

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .