Я пробовал это на Centos и Debian.
Означает ли * в команде ls рекурсивный поиск?
Если я начну вводить имя каталога и нажму Tab, то увижу следующее:
# ls /etc/rc<tab>
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local rcS.d/
Я думал, что если поставлю звездочку в пути, то увижу то же самое, но вместо этого был выполнен рекурсивный поиск:
# ls /etc/rc*
/etc/rc.local
/etc/rc0.d:
K50netconsole K90network
/etc/rc1.d:
K50netconsole K90network
/etc/rc2.d:
K50netconsole S10network
/etc/rc3.d:
K50netconsole S10network
...
Команда dir в Windows просто покажет мне каталоги, соответствующие /etc/rc*. Как мне добиться такого же поведения от ls (без использования клавиши Tab)?
****Редактировать/Обновить:
Хорошо, теперь я понимаю, что * интерпретируется bash вместо команды, но всегда ли это интерпретируется как «перечисление записей файлов и папок» или если я использую его в другом контексте, он делает что-то еще, и если да, есть ли в bash какой-то большой оператор if, который говорит «если * используется с путями файловой системы, возвращает имена файлов и папок, если * используется с rpm (например,rpm -qa пост*) возвращать имена пакетов и т.д."
решение1
Asterisk расширяется до того, как доберется до ls
команды, поэтому это эквивалентно
ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d ...
который выведет список содержимого каждого каталога по отдельности.
Возможно, вы захотите использовать команду , ls -d /etc/rc*
чтобы отключить вывод списка файлов внутри каталогов, или использовать команду, которая просто отображает расширение, например echo /etc/rc*
.
решение2
По умолчанию, если вы вызываете ls
с аргументом каталога, он отображает содержимое каталога. Вы можете изменить это поведение с помощью -d
параметра. Изman ls
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links