Identifier les fichiers texte / ASCII sous Linux / Solaris

0

J'ai un petit projet pour construire un script bash qui recherche le système d'exploitation (Linux / Solaris) pour l'adresse IP actuelle dans les fichiers et les remplace par une autre adresse IP.

Le problème est que l'adresse IP peut se trouver dans des fichiers texte ou dans des fichiers non-texte tels que des fichiers binaires / de données.

J'utilise la commande:

 file --mime $PATH (--mime is valid only for linux)

Afin de vérifier si un fichier est un fichier texte ou non (fichier binaire, fichier de données, etc.)

Est-ce exact?

Par exemple si j'ai la commande:

file --mime $PATH (returns the results "text/plain")

Alors c'est un fichier texte / ASCII, sinon ce n'est pas un fichier texte?

La deuxième question:

file --mime "--mime"     

L'indicateur est valide uniquement pour Linux mais pas sous Solaris. Quelle est donc la solution de rechange pour Solaris?

Parfois, la commande de fichier n'identifie pas exactement la définition du fichier cible. Par conséquent, si quelqu'un a d'autres idées sur la façon d'identifier le fichier texte…?

yael
la source

Réponses:

0

Non, cela ne fonctionnera pas correctement. Essayez par exemple de l'exécuter sur un fichier HTML.

Si je me souviens bien, il est courant de rechercher un octet nul (sauf que cela ne fonctionnera pas pour les fichiers UTF-8). Pour les fichiers ASCII simples, ceci le fera:

$ hexdump -v -e '/1 "%02X "' <"$file" | fgrep -q 00
Aluísio ASG
la source
hexdump -v -e '/ 1 "% 02X"' <"/ etc / hosts" | fgrep -q 00 Mais cela n’a rien retourné - pourquoi hosts est un fichier texte?
yael
@yael Regardez le code de sortie ($?): 0 = octet nul trouvé; 1 = aucun octet nul trouvé.
Aluísio ASG