Pregunta

Estoy enumerando solo los archivos Basenames con un comando LS como este, del que obtuve aquí:

ls --color -1 . | tr '\n' '\0' | xargs -0 -n 1 basename

Me gustaría enumerar todos los directorios en la primera columna, todos los ejecutables de la siguiente, todos los archivos regulares duran (tal vez también con una columna para cada extensión).

Entonces, el primer "desafío" (y principal) es imprimir múltiples columnas de diferentes longitudes.

¿Tiene alguna sugerencia qué comandos debería usar para escribir ese script? ¿Debo cambiar a find? ¿O debería escribir el script todo en Perl?

Quiero poder ordenar opcionalmente las columnas por tamaño también ;-) No necesariamente estoy buscando un script para hacer lo anterior, pero tal vez algunos consejos sobre las formas de abordar la redacción de dicho script.

¿Fue útil?

Solución

#!/bin/bash

width=20

awk -F':' '

/directory/{
  d[i++]=$1
  next
}

/executable/{
  e[j++]=$1
  next
}

{
  f[k++]=$1
}

END{
  a[1]=i;a[2]=j;a[3]=k
  asort(a)
  printf("%-*.*s | \t%-*.*s | \t%-*.*s\n", w,w,"Directories", w,w,"Executables", w,w,"Files")
  print "------------------------------------------------------------------------"
  for (i=0;i<a[3];i++)
    printf("%-*.*s |\t%-*.*s |\t%-*.*s\n", w,w,d[i], w,w,e[i], w,w,f[i])
}' w=$width < <(find . -exec file {} +)

Salida de muestra AQUÍ

Esto se puede mejorar aún más calculando cuál es la entrada más larga por columna y usar eso como ancho. Dejaré eso como un ejercicio para el lector

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top