Псевдоним для удаления префикса папки из команды `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
задан 7 August 2017 в 06:54

2 ответа

Это происходит из-за "расширения пути" и не связано с эти 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
ответ дан 7 August 2017 в 16:54

Это не ls это делает это. Это - оболочка Bash. Замените Ваш ls команды с echo, и посмотрите "подстановочное расширение", которое удар делает для Вас. К этому времени 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.

То, что Вы хотите, не возможно, извините.

0
ответ дан 7 August 2017 в 16:54

Другие вопросы по тегам:

Похожие вопросы: