Para remover a contagem de links físicos da saída de ls -l
, deixando o restante da linha intacta:
ls -l | sed -E '2,$s/ +[0-9]+//'
A substituição sed
removerá o primeiro conjunto de dígitos e qualquer espaço antes dele em cada linha após a primeira linha (a primeira linha contém o total
).
Como uma função
myls () {
command ls -l "$@" | sed -E '2,$s/ +[0-9]+//'
}
Esta função chama ls -l
com qualquer outro argumento de linha de comando fornecido pelo usuário para a função antes de enviar o resultado através de sed
.
Usando command ls
, garantimos que, se você decidir renomear a função em ls
, a função não se chamaria recursivamente.
Exemplo:
$ ls -la ~/.skel
total 18
drwxr-xr-x 2 kk wheel 512 May 4 16:29 .
drwxr-xr-x 3 kk wheel 512 Jun 28 08:15 ..
-rw-r--r-- 1 kk wheel 87 Nov 1 2017 .Xdefaults
-rw-r--r-- 1 kk wheel 771 Feb 9 10:18 .cshrc
-rw-r--r-- 1 kk wheel 101 Nov 1 2017 .cvsrc
-rw-r--r-- 1 kk wheel 359 Nov 1 2017 .login
-rw-r--r-- 1 kk wheel 175 Nov 1 2017 .mailrc
-rw-r--r-- 1 kk wheel 229 May 4 16:29 .profile
-rw-r--r-- 1 kk wheel 108 Apr 15 12:50 .vimrc
-rw-r--r-- 1 kk wheel 0 Apr 21 17:44 .zshrc
$ myls -a ~/.skel
total
drwxr-xr-x kk wheel 512 May 4 16:29 .
drwxr-xr-x kk wheel 512 Jun 28 08:15 ..
-rw-r--r-- kk wheel 87 Nov 1 2017 .Xdefaults
-rw-r--r-- kk wheel 771 Feb 9 10:18 .cshrc
-rw-r--r-- kk wheel 101 Nov 1 2017 .cvsrc
-rw-r--r-- kk wheel 359 Nov 1 2017 .login
-rw-r--r-- kk wheel 175 Nov 1 2017 .mailrc
-rw-r--r-- kk wheel 229 May 4 16:29 .profile
-rw-r--r-- kk wheel 108 Apr 15 12:50 .vimrc
-rw-r--r-- kk wheel 0 Apr 21 17:44 .zshrc
Uma variação da função que age exatamente como ls
, a menos que você use ls -l
:
ls () (
add_filter=0
while getopts ':l' opt; do
case $opt in
l) add_filter=1 ;;
1) add_filter=0
esac
done
command ls "$@" |
if [ "$add_filter" -eq 1 ]; then
sed -E '2,$s/ +[0-9]+//'
else
cat
fi
)
A função faz sua própria análise de linha de comando para detectar se a opção -l
foi usada (e também não desativada posteriormente pelo uso de -1
). Se fosse, nós colocamos uma bandeira. Mais tarde, se o sinalizador foi definido, filtramos a saída de ls
a sed
. Se o sinalizador não foi definido, apenas passamos a saída como está por meio de cat
.