Question

Je liste juste le fichier avec des noms de base une commande ls comme ça, que je suis ici :

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

Je voudrais énumérer tous les répertoires dans la première colonne, tous les executables dans l'autre, tous les fichiers réguliers dernier (peut-être aussi avec une colonne pour chaque extension).

La première (et principale) « défi » consiste à imprimer plusieurs colonnes de différentes longueurs.

Avez-vous des suggestions que je devrais utiliser les commandes d'écrire ce script? Dois-je passer à find? Ou devrais-je simplement écrire le script tout en Perl?

Je veux être en mesure de trier les colonnes en option par taille trop ;-) Je ne cherche pas nécessairement un script pour faire ce qui précède, mais peut-être quelques conseils sur la façon d'aborder la rédaction d'un tel script.

Était-ce utile?

La solution

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

Exemple de sortie

Ceci peut être encore améliorée en calculant ce que l'entrée la plus longue est par colonne et en utilisant que la largeur. Je vais laisser cela comme un exercice au lecteur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top