2010-09-07 23 views
6

¿Cómo puedo verificar si el archivo es binario o sin texto para abrir el archivo?linux + verificar si el archivo es de texto o binario

+0

Es difícil saber si esto está relacionado con la programación o si se debe migrar a SuperUser.com (¿se busca una utilidad existente?). – Johnsyweb

+0

El texto es, en el mejor de los casos, un subconjunto del binario, si no meramente una interpretación. Considere un archivo de un byte que contenga '0x65'. Ahora dime absolutamente si esto es binario o texto. – MSalters

+0

qué tal copiar el archivo antes de verificarlo copiar -> abrir -> verificar -> eliminar –

Respuesta

2

No hay forma de estar seguro sin mirar dentro del archivo. Sin embargo, no tienes que abrirlo con un editor y ver si tienes una pista. Es posible que desee examinar el comando file: http://linux.die.net/man/1/file

9

El gato de Schrödinger, me temo.

No hay forma de determinar el contenido de un archivo sin abrirlo. El sistema de archivos no almacena metadatos relacionados con los contenidos.

Si no es un requisito difícil abrir el archivo, entonces hay una serie de soluciones disponibles para usted.

Editar:

Se ha sugerido en una serie de comentarios y respuestas que file(1) es una buena manera de determinar el contenido. De hecho, es. Sin embargo, file(1)abre el archivo, que estaba prohibido en la pregunta. Ver la penúltima línea en el siguiente ejemplo:

> echo 'This is not a pipe' > file.jpg && strace file file.jpg 2>&1 | grep file.jpg 
execve("/usr/bin/file", ["file", "file.jpg"], [/* 56 vars */]) = 0 
lstat64("file.jpg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0 
stat64("file.jpg", {st_mode=S_IFREG|0644, st_size=19, ...}) = 0 
open("file.jpg", O_RDONLY|O_LARGEFILE) = 3 
write(1, "file.jpg: ASCII text\n", 21file.jpg: ASCII text 
+1

El archivo de comandos de Unix hace un buen trabajo al determinar heurísticamente el tipo – Joel

+0

@Joel: Sí, lo hace. También abre el archivo. – Johnsyweb

+1

La pregunta es demasiado vaga para saber si "abrir" significa abrir (2). "Abrir" tiene otras connotaciones. – camh

2

Si usted está tratando de hacerlo desde una consola de comandos a continuación, el comando file será tener una pista sobre qué tipo de archivo es. Si es texto, generalmente incluirá la palabra texto en su descripción.

No conozco ningún método 100% para determinar esto, pero el comando de archivo es probablemente el más preciso.

+1

Por supuesto que abre el archivo y no será 100% seguro. –

+1

De hecho, sí, aunque no estaba seguro de si era reacio a abrir el archivo él mismo o tener una utilidad para abrirlo. He declarado que no hay un método 100% seguro para hacer esto. –

2

En Unix, un archivo es solo algunos bytes. Por lo tanto, sin abrir el archivo, no puede averiguar el 100% que es ASCII o Binario.

Puede usar las herramientas disponibles y profundizar para hacerlo a prueba de tontos.

  1. archivo
  2. cat -v
6

La forma correcta para determinar el tipo de un archivo es utilizar el (1) comando de archivo.

También debe tener en cuenta que los archivos codificados en UTF-8 son archivos de "texto", pero pueden contener datos que no sean ASCII. Otras codificaciones también tienen este problema. En el caso de texto codificado con code page, puede que no sea posible determinar inequívocamente si un archivo es texto o no.

El archivo (1) de comandos se verá en la estructura de un archivo para tratar de determinar lo que contiene - desde el archivo (1) página de manual:

El tipo mostrado contendrá usualmente una de las palabras texto (el archivo sólo contiene caracteres de imprenta y unos pocos caracteres de control común y es probable que sea seguro de leer en un archivo ASCII terminal), ejecutable (el archivo contiene el resultado de la compilación de un programa en una forma comprensible hasta cierto núcleo de UNIX u otro), o datos significan nada otra cosa (datos suele ser ‘binario’ o no imprimible).

En relación con diferentes codificaciones de caracteres, el archivo (1) página de manual tiene esto que decir:

Si un archivo no coincide con ninguna de las entradas en el archivo de la magia, es examinado para ver si parece ser un archivo de texto. ASCII, ISO-8859-x, no ISO 8 bits extendidos-juegos de caracteres ASCII (como los utilizados en Macintosh y sistemas de PC IBM), UTF-8-codificado Unicode, UTF-16-codificado Unicode, y Los juegos de caracteres EBCDIC se pueden distinguir por los diferentes rangos y secuencias de bytes que constituyen texto imprimible en cada conjunto. Si un archivo supera cualquiera de estas pruebas, se informa sobre su conjunto de caracteres. ASCII, Los archivos ISO-8859-x, UTF-8 y ASCII extendido se identifican como 'texto' porque se leerán principalmente en casi cualquier terminal; UTF-16 y EBCDIC son solo 'datos de caracteres' porque, si bien contienen texto, es texto que requerirá traducción antes de que pueda leerse.

Así, un texto será identificado como texto, pero algunos pueden ser identificados como datos de carácter. Deberá determinar usted mismo si esto es importante para su aplicación y tomar las medidas adecuadas.

Cuestiones relacionadas