Псевдоним для удаления префикса папки из команды `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 & amp; Вопрос Linux с похожим запросом, но ответы там запутаны.

Алиас был бы предпочтительнее, потому что у меня уже есть четыре настройки ls aliases в ~/.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

6 ответов

Это происходит из-за «расширения имени пути» и не связано с 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*

вывод будет:

[F5]
2
ответ дан 22 May 2018 в 19:44
  • 1
    Это сложный способ сделать это. myls () { basename -a "$@"; }, а затем myls /boot/vml* проще. – muru 7 August 2017 в 07:01
  • 2
    Подумайте, что произойдет с именами файлов с пробелами. Зачем использовать $(ls)? – muru 7 August 2017 в 07:06
  • 3
    Ваш выход удален /boot/vmlinuz-. Удаление /boot/ хорошее :). Удаление vmlinuz- не так хорошо :( Вы тестируете это в своем фактическом каталоге /boot? – WinEunuuchs2Unix 7 August 2017 в 07:06
  • 4
    Когда basename -a "$@" достаточно, то почему ...? Неважно. – muru 7 August 2017 в 07:31
  • 5
    @muru О, мой бог ... :)) просто отправьте ответ, и я свободен ... Я опаздываю: D Что, черт возьми, я думал ... Я вообще не думал, я должен поспать, я думаю: / – Ravexina 7 August 2017 в 07:33

Это происходит из-за «расширения имени пути» и не связано с 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*

вывод будет:

[F5]
2
ответ дан 18 July 2018 в 08:57

Это происходит из-за «расширения имени пути» и не связано с 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*

вывод будет:

[F5]
2
ответ дан 24 July 2018 в 19:12

Это не ls. Это оболочка Баша. Замените команды ls на echo и посмотрите «расширение подстановки», которое bash делает для вас. К тому времени, когда ls начнет выполнение, все расширения подстановки будут выполнены.

ls /var/lib/initramfs-tools

Пропускает ls имя каталога (см. ls -d /var/lib/initramfs-tools).

ls /boot/vml*

фактически видит (в MY system, 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
ответ дан 22 May 2018 в 19:44
  • 1
    Вы не попробовали echo /var/lib/initramfs-tools, который возвращает дерево каталогов и ни один из файлов. Таким образом, echo всегда не совпадает с командой ls, хотя она работает в примере, который вы указали. Спасибо, что пожалели, что это невозможно сделать, но у меня все еще есть пальцы, скрещенные для «Faint Hope Clause». – WinEunuuchs2Unix 7 August 2017 в 06:59
  • 2
    @ WinEunuuchs2Unix попробуйте ls /var/lib/in*, затем. Вы увидите, что он по-прежнему отображает полные пути к каталогам, что и есть в качестве аргументов. Единственный аргумент каталога - это особый случай. – muru 7 August 2017 в 07:03
  • 3
    @muru Я заметил различие между полным именем подкаталога и именем файла wild card, прежде чем я разместил вопрос. Я просто думаю, что один формат выглядит лучше, чем другой. Я также заметил, что вы продолжаете редактировать расширенные символы рисования линии на моем выходе PS и заменяете их пробелами. – WinEunuuchs2Unix 7 August 2017 в 07:16
  • 4
    @ WinEunuuchs2Unix Все, что подсказывает глупость, это просто шум, когда выход достаточно короткий. – muru 7 August 2017 в 07:17
  • 5
    @muru Один человек "шум" Думаю, это еще одна демаркационная точка. Мне нравится расширенная строка набора символов ASCII намного лучше, чем пустая строка в приглашении PS. Я думаю, что это дает лучшее визуальное представление между командами. Но я не буду спорить о том, что пожимает плечами . – WinEunuuchs2Unix 7 August 2017 в 07:33

Это не ls. Это оболочка Баша. Замените команды ls на echo и посмотрите «расширение подстановки», которое bash делает для вас. К тому времени, когда ls начнет выполнение, все расширения подстановки будут выполнены.

ls /var/lib/initramfs-tools

Пропускает ls имя каталога (см. ls -d /var/lib/initramfs-tools).

ls /boot/vml*

фактически видит (в MY system, 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
ответ дан 18 July 2018 в 08:57

Это не ls. Это оболочка Баша. Замените команды ls на echo и посмотрите «расширение подстановки», которое bash делает для вас. К тому времени, когда ls начнет выполнение, все расширения подстановки будут выполнены.

ls /var/lib/initramfs-tools

Пропускает ls имя каталога (см. ls -d /var/lib/initramfs-tools).

ls /boot/vml*

фактически видит (в MY system, 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
ответ дан 24 July 2018 в 19:12
  • 1
    Вы не попробовали echo /var/lib/initramfs-tools, который возвращает дерево каталогов и ни один из файлов. Таким образом, echo всегда не совпадает с командой ls, хотя она работает в примере, который вы указали. Спасибо, что пожалели, что это невозможно сделать, но у меня все еще есть пальцы, скрещенные для «Faint Hope Clause». – WinEunuuchs2Unix 7 August 2017 в 06:59
  • 2
    @ WinEunuuchs2Unix попробуйте ls /var/lib/in*, затем. Вы увидите, что он по-прежнему отображает полные пути к каталогам, что и есть в качестве аргументов. Единственный аргумент каталога - это особый случай. – muru 7 August 2017 в 07:03
  • 3
    @muru Я заметил различие между полным именем подкаталога и именем файла wild card, прежде чем я разместил вопрос. Я просто думаю, что один формат выглядит лучше, чем другой. Я также заметил, что вы продолжаете редактировать расширенные символы рисования линии на моем выходе PS и заменяете их пробелами. – WinEunuuchs2Unix 7 August 2017 в 07:16
  • 4
    @ WinEunuuchs2Unix Все, что подсказывает глупость, это просто шум, когда выход достаточно короткий. – muru 7 August 2017 в 07:17
  • 5
    @muru Один человек "шум" Думаю, это еще одна демаркационная точка. Мне нравится расширенная строка набора символов ASCII намного лучше, чем пустая строка в приглашении PS. Я думаю, что это дает лучшее визуальное представление между командами. Но я не буду спорить о том, что пожимает плечами . – WinEunuuchs2Unix 7 August 2017 в 07:33

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

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