![从 `ls` 命令中删除文件夹前缀的别名](https://linux22.com/image/1001890/%E4%BB%8E%20%60ls%60%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%A4%B9%E5%89%8D%E7%BC%80%E7%9A%84%E5%88%AB%E5%90%8D.png)
有时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
发生这种情况是因为“路径名扩展”,与无关ls
,ls
在命令运行之前,“*”将扩展为绝对路径名,就像您像这样运行命令一样:
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
。
很抱歉,您想要的是不可能的。