从 `ls` 命令中删除文件夹前缀的别名

从 `ls` 命令中删除文件夹前缀的别名

有时ls会在文件名前加上文件夹名,有时则不会。您可以在您的平台上复制以下内容:

$ 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

我喜欢第一个版本不包含目录前缀的格式initramfs-tools/。我觉得第二个版本boot/添加作为前缀是多余的。

我找到了这个Unix 和 Linux 问题有类似的请求,但答案却很复杂。

最好使用别名,因为我已经ls在中设置了四个别名~/.bashrc

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

即使有别名,dir我仍然会使用它:)

答案1

发生这种情况是因为“路径名扩展”,与无关lsls在命令运行之前,“*”将扩展为绝对路径名,就像您像这样运行命令一样:

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

功能

创建函数:

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

别名

或者创建别名:

alias myls='basename -a'

将其放在您自己.bashrc或其他地方,然后像这样使用它:

myls /boot/vml*

输出为:

vmlinuz-4.9.0-3
...

答案2

不是ls那个命令在做这些。而是 Bash shell。用 替换你的ls命令echo,然后看看 bash 为你做的“通配符扩展”。当ls开始执行时,所有的通配符扩展都完成了。

ls /var/lib/initramfs-tools

传递ls目录的名称(参见ls -d /var/lib/initramfs-tools)。

ls /boot/vml*

实际上看到(在我的系统,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

要的文件列表ls

很抱歉,您想要的是不可能的。

相关内容