Alias para remover o prefixo da pasta do comando 'ls'

1

Às vezes, ls prefixará os nomes de arquivos com um nome de pasta, outras vezes não. Você pode duplicar na sua plataforma:

$ ls /var/lib/initramfs-tools
4.10.10-041010-generic  4.4.0-78-generic       4.8.17-040817-generic
4.10.17-041017-generic  4.4.0-89-generic       4.9.0-040900-generic
4.11.12-041112-generic  4.4.33-040433-generic  4.9.21-040921-generic
4.11.3-041103-generic   4.4.8-040408-generic   4.9.40-040940-generic
4.11.9-041109-generic   4.6.3-040603-generic   4.9.8-040908-generic
4.12.0-041200-generic   4.7.5-040705-generic   4.9.9-040909-generic
4.12.4-041204-generic   4.8.12-040812-generic

$ ls /boot/vml*
/boot/vmlinuz-4.10.10-041010-generic  /boot/vmlinuz-4.4.8-040408-generic
/boot/vmlinuz-4.10.17-041017-generic  /boot/vmlinuz-4.6.3-040603-generic
/boot/vmlinuz-4.11.12-041112-generic  /boot/vmlinuz-4.7.5-040705-generic
/boot/vmlinuz-4.11.3-041103-generic   /boot/vmlinuz-4.8.12-040812-generic
/boot/vmlinuz-4.11.9-041109-generic   /boot/vmlinuz-4.8.17-040817-generic
/boot/vmlinuz-4.12.0-041200-generic   /boot/vmlinuz-4.9.0-040900-generic
/boot/vmlinuz-4.12.4-041204-generic   /boot/vmlinuz-4.9.21-040921-generic
/boot/vmlinuz-4.4.0-78-generic        /boot/vmlinuz-4.9.40-040940-generic
/boot/vmlinuz-4.4.0-89-generic        /boot/vmlinuz-4.9.8-040908-generic
/boot/vmlinuz-4.4.33-040433-generic   /boot/vmlinuz-4.9.9-040909-generic

Eu gosto do formato da primeira versão que não inclui o prefixo de diretório initramfs-tools/ . Sinto que a segunda versão em que boot/ é adicionado como um prefixo é redundante.

Eu encontrei este Unix & amp; ; Linux pergunta com um pedido semelhante, mas as respostas são complicadas.

Um alias seria preferível porque eu já tenho quatro ls de aliases configuradas em ~/.bashrc :

alias ls='ls --color=auto'
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

Mesmo se o apelido fosse chamado de dir , eu ainda o usaria:)

    
por WinEunuuchs2Unix 07.08.2017 / 05:43

2 respostas

2

Isso está acontecendo por causa da "expansão do nome do caminho" e não está relacionado ao ls , antes que seus comandos ls executem o seu "*" será expandido para nomes absolutos, é como se você estivesse executando o comando assim:

ls /path/to/file/1 /path/to/file/2 /path/to/file/3

Função

Crie uma função:

function myls() { basename -a "$@" ;}

Alias

ou crie um alias:

alias myls='basename -a'

Coloque seu .bashrc ou outro lugar e use-o assim:

myls /boot/vml*

a saída seria:

vmlinuz-4.9.0-3
...
    
por Ravexina 07.08.2017 / 05:58
0

Não é ls que faz isso. É a concha de Bash. Substitua seus comandos ls por echo e veja a "expansão curinga" que o bash faz por você. No momento em que ls começar a executar, toda a expansão de curingas será concluída.

ls /var/lib/initramfs-tools

Passa ls do nome de um diretório (veja ls -d /var/lib/initramfs-tools ).

ls /boot/vml*

realmente vê (no sistema MY , YMMV)

w3@aardvark:~(0)$ ls /boot/vml*
/boot/vmlinuz-4.4.0-83-generic  /boot/vmlinuz-4.4.0-87-generic  /boot/vmlinuz-4.4.0-89-generic
w3@aardvark:~(0)$ echo /boot/vml*
/boot/vmlinuz-4.4.0-83-generic /boot/vmlinuz-4.4.0-87-generic /boot/vmlinuz-4.4.0-89-generic

Uma lista de arquivos para ls .

O que você quer não é possível, desculpe.

    
por waltinator 07.08.2017 / 05:51