Domanda

Sto messa in vendita solo i BaseNames file con un comando ls come questo, che ho avuto da qui :

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

Vorrei elencare tutte le directory nella prima colonna, tutti gli eseguibili nel prossimo, tutti i file normali ultima (forse anche con una colonna per ciascuna estensione).

Quindi, la prima (e principale) "sfida" è quella di stampare più colonne di diverse lunghezze.

Hai qualche suggerimento quello che comanda dovrei usare per scrivere quello script? Dovrei passare a find? O devo solo scrivere la sceneggiatura tutto in Perl?

Voglio essere in grado di eventualmente ordinare le colonne secondo dimensione troppo ;-) Io non sono necessariamente in cerca di uno script per fare quanto sopra, ma forse qualche consiglio su modi per avvicinarsi a scrivere uno script.

È stato utile?

Soluzione

#!/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 {} +)

Esempio di output qui

Questo può essere ulteriormente migliorato da calcolando ciò che la voce più lunga è per-colonna e utilizzando tale come la larghezza. Lascio come esercizio per il lettore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top