No sé si ls
es capaz de mostrar una columna de tipo de archivo.
Hacer una búsqueda rápida en línea y buscar en el man
no reveló tal capacidad. ¿Es capaz de hacer esto?
Aclaración: Esto es especialmente útil si los archivos no tienen una extensión.
Actualizar
A partir del 28/04/2018, las respuestas han sido bastante interesantes, sin embargo, no proporcionaron lo que estaba buscando. Más específicamente,
file
da los tipos de archivo reales pero no se integra bien con ellosls
. Específicamente, yo usols -lhtrpG --group-directories-first --color=always
ls -F
es unals
solución, sin embargo, proporciona símbolos, no una columna de tipos de archivo reales.
Por esta razón, no he marcado ninguna de las respuestas como la respuesta que estoy buscando.
command-line
ls
usuario10853
fuente
fuente
ls -lahtrpF --group-directories-first --color=always /dev
ols -lsahG /dev
, y para lectura de programals -lsa /dev
. verman ls
documentación para más detalles.Respuestas:
file
definitivamente es la opción correcta para obtener la información del tipo de archivo que desea. Para combinar su salida con la dels
sugiero usarfind
:Esto encuentra todos los archivos en el directorio actual e imprime la salida
ls -dils
y la salida defile -b
cada uno en una línea propia. Salida de ejemplo:Pero, como no desea una línea de tipo de archivo , sino una columna de tipo de archivo , aquí hay una manera de deshacerse del carácter de nueva línea entre las líneas:
Salida de muestra:
Esa nueva columna es bastante larga, así que vamos a cortar todo desde la primera coma:
La salida de eso se ve así:
Esto no es muy útil, así que ¿qué tal un
alias
? Con la siguiente línea en su~/.bash_aliases
archivo solo necesita ejecutarlsf
para obtener el resultado anterior para el directorio actual.fuente
paste
ocolumn
, podría obtener una mejor alineación:lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }
el problema de alineación no es evidente en la respuesta debido a los tamaños y fechas similares. (Esto también será un poco más rápido, ya que los comandos se invocarán menos veces en lugar de una vez por archivo.)column
enfoque funciona para usted? Simplemente imprime la salida dels -l
cada archivo seguido defile
la salida de cada archivo para mí, como si el shell simplemente hicierals -l "$@"; file -b "$@" | cut -d, -f1
.../etc
.column
la salida no está en el terminal, debe especificar el recuento de columnas o los archivos se mostrarán uno tras otro; entoncescolumn -c "$COLUMNS" ...
debería funcionar en cualquier caso.Creo que la mejor manera de mostrar un tipo de archivo es usar este comando:
Si desea enumerar los tipos de todos los archivos en un directorio, simplemente use:
Para obtener más detalles sobre los argumentos, consulte:
fuente
mime type
única, utilice:file --mime-type filename
.file
bastante bien, pero esta pregunta es diferente.file
respuesta. Como respondí a los demás, esto no es suficiente (debe integrarse con ls), así que lo mantengo en una votación. Gracias.file --mime /dev/*
para listar mimos en el directorio / dev en lugar de actualPara mayor claridad, voy a señalar que puede ver el tipo de archivo en un sentido básico con
ls
, usando la-F
bandera (clasificar) que agrega un símbolo al nombre de archivo dependiendo de su tipo:Sin
ls -l
embargo, puede ver esa información un poco menos crípticamente mostrada en la primera letra de la salida de . La respuesta de wjandrea describe esto con más detalle.Pero no creo que esto sea lo que quiere decir con tipo de archivo. El
ls
comando no busca dentro de los archivos normales, solo en las listas de directorios (que almacenan nombres de archivos) e inodes (que almacenan metadatos, incluido el "tipo" en el sentido mencionado anteriormente).Entonces, el
ls
comando no puede mostrar el tipo de archivo en el sentido de si es una imagen JPG o un archivo binario o un archivo de texto o un documento de LibreOffice de algún tipo, porque no tiene esa información.Para eso, como señala la respuesta de singrium , necesita el
file
comando, que analiza los primeros 50-100kB más o menos del contenido de los archivos para determinar su tipo.fuente
Una forma de tipo de archivo es si un archivo es un archivo normal, un directorio, dispositivo, enlace simbólico, etc.
ls
puede mostrar esto usando las opciones-l
o-F
.La opción
-l
mostrará el tipo de archivo como un solo carácter al comienzo de una lista, por ejemplo:Donde
-
es un archivo normal,d
es un directorio yl
es un enlace simbólico.La opción
-F
mostrará el tipo de archivo como un sufijo, por ejemplo:Donde ningún sufijo es un archivo normal,
/
es un directorio y@
es un enlace simbólico.Más información sobre estos está disponible en
info coreutils 'ls invocation'
, resumido aquí:Para
-l
:Para
-F
:fuente