Coloque esta declaração da função shell nos seus scripts de inicialização do shell:
function duls {
paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}
Chamei-o de duls
porque mostra a saída de du
e ls
(nessa ordem):
$ duls
210M drwxr-xr-x 21 kk staff 714 Jun 15 09:32 .
$ duls *
36K -rw-r--r-- 1 kk staff 35147 Jun 9 16:03 COPYING
8.0K -rw-r--r-- 1 kk staff 6962 Jun 9 16:03 INSTALL
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
4.0K -rw-r--r-- 1 kk staff 1689 Jun 9 16:03 README
120K -rw-r--r-- 1 kk staff 121585 Jun 10 13:26 aclocal.m4
684K drwxr-xr-x 7 kk staff 238 Jun 10 13:26 autom4te.cache
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
60K -rw-r--r-- 1 kk staff 60083 Jun 10 13:26 config.log
36K -rwxr-xr-x 1 kk staff 34716 Jun 10 13:26 config.status
264K -rwxr-xr-x 1 kk staff 266637 Jun 10 13:26 configure
8.0K -rw-r--r-- 1 kk staff 4280 Jun 10 13:25 configure.ac
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
2.3M drwxr-xr-x 28 kk staff 952 Jun 10 13:26 examples
6.2M -rw-r--r-- 1 kk staff 6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
11M drwxr-xr-x 42 kk staff 1428 Jun 10 13:26 src
$ duls doc
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
$ duls [bM]*
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
Explicação:
O utilitário paste
cria colunas a partir de sua entrada de acordo com a especificação que você fornece. Dados dois arquivos de entrada, eles são colocados lado a lado, com uma tabulação como separador.
Nós damos a saída de du -hs -- "$@" | cut -f1
como o primeiro arquivo (fluxo de entrada realmente) e a saída de ls -ld -- "$@"
como o segundo arquivo.
Na função, "$@"
será avaliado na lista de todos os argumentos da linha de comando, cada um com aspas duplas. Portanto, ele irá entender os caracteres globbing e os nomes dos caminhos com espaços, etc.
Os duplos minuses ( --
) sinalizam o fim das opções da linha de comando para du
e ls
. Sem isso, dizer duls -l
confundiria du
e qualquer opção para du
que ls
não confunderia ls
(e as opções que existem em ambas as utilidades podem não significar a mesma coisa, e seria uma bagunça).
O cut
após du
simplesmente corta a primeira coluna da saída du -hs
(os tamanhos).
Eu decidi colocar a saída du
à esquerda, caso contrário eu teria que gerenciar uma coluna bamba da direita (devido a diferentes comprimentos de nomes de arquivos).
O comando não aceitará sinalizadores de linha de comando.
Isso foi testado em bash
e em ksh93
. Não funcionará com /bin/sh
.