Como usar 'ls' para agrupar e mostrar apenas uma primeira palavra do nome do diretório?

2

Eu quero definir um novo comando ls para fazer algo assim

O primeiro quando eu uso o comando normal ls :

$ls
undergrade.AI              undergrade.KDD
undergrade.AI2             undergrade.micro
undergrade.ANN             undergrade.OOT
undergrade.autoMata        undergrade.OS
undergrade.bulletin        undergrade.parallelAndDistributedProgramming
undergrade.CG              undergrade.pop
undergrade.CLP             undergrade.PPL
undergrade.comNet          undergrade.researchingMethod
undergrade.comOr           undergrade.SA
undergrade.comSec          undergrade.SE
undergrade.DBMS            undergrade.softwareTesting
undergrade.discrete        undergrade.webApps
code.ajax  code.cc  code.erl  code.html    code.js    code.pl     code.py   
code.sage  code.x3d code.c    code.cl      code.go    code.jquery code.lisp  
code.pro   code.roo code.sh   code.xml

E para um novo ls que eu quero:

$ls_new
undergrade  code

Eu quero mostrar apenas a primeira palavra quando eu digito ls_new .

Por que eu quero esse comando?

Porque eu nomeei minhas pastas no padrão de category.subj que são demais quando uso o ls comum. então eu preciso de algum comando que possa filtrar, agrupar e mostrar, mas apenas o nome category .

    
por fronthem 01.11.2013 / 20:07

2 respostas

3

Isso deve fazer o que você quer:

ls|sed 's/\..*//'|sort -u|column

Se o seu shell tem a largura do seu terminal em $ COLUMNS, então é melhor:

ls|sed 's/\..*//'|sort -u|column -c $COLUMNS
    
por 01.11.2013 / 20:20
3

Outra maneira com awk :

ls | awk -F. '$1 != p { p=$1; print $1}'
    
por 01.11.2013 / 20:36