Почему этот шаблон не работает так, как я ожидаю?

В моей пользовательской папке есть папки, такие как D ropbox, D ocuments, D ownloads & amp; D Ump.

ls a* должен перечислить все файлы, имя которых начинается с a. Правильно? Но когда я даю команду ls d*, вместо того, чтобы просто отобразить dump, она показывает мне каталог ls дампа. И когда я даю команду как ls D*, то она отображает ls всех фолдов, начиная с D

. Так какую часть я упустил в понимании?

[ 1115] Редактировать: Прикрепить скриншот ls screenshot

11
задан 12 October 2011 в 01:11

3 ответа

Согласно странице справочника удара:

колотите сканирует каждое слово для символов *?, и [. Если один из этих символов появляется, то слово рассматривается как шаблон и заменяется в алфавитном порядке отсортированным списком имен файлов, соответствующих шаблону

и от информационного узла для ls

'Ls' информация о списках программ о файлах (любого типа, включая каталоги). Опции и аргументы файла могут быть смешаны произвольно, как обычно.

Для параметров командной строки неопции, которые являются каталогами, по умолчанию 'ls' перечисляет содержание каталогов, не рекурсивно, и файлы исключения с началом имен '.'. Для других аргументов неопции по умолчанию 'ls' перечисляет просто имя файла. Если никакие аргументы неопции не указаны, 'ls' перечисляет содержание текущего каталога.

таким образом, когда эй дают ls d*, d* расширен до отсортированного списка всего файла/имен каталогов, запускающегося с d. Таким образом, Вы управляете, становится

ls dump

и поскольку дамп является именем каталога, таким образом, Вы получаете список всех файлов в каталоге "дамп', но когда Вы даете ls D*, D* расширен до "Настольных Загрузок Документов Dropbox", таким образом, команда становится

ls Desktop Documents Downloads Dropbox

и поскольку все они являются каталогами, Вы получаете список файлов в отдельном каталоге. Если бы был файл, запускающийся с D в текущем каталоге, он был бы перечислен отдельно.

17
ответ дан 12 October 2011 в 01:11

ls d * и D * содержат список файлов и папок, соответствующих d * и D * соответственно, поведение такое же, в вашем тесте должна быть ошибка.

Если вы хотите перечислить только имена папок, а не содержимое папки, вам нужно использовать «-d»:

ls -d D*
0
ответ дан 12 October 2011 в 01:11

Как предложено выше, вариант -d - это путь. Добавление

alias ld='ls -d'

в мой файл ~/.bashrc хорошо работает для меня.

0
ответ дан 12 October 2011 в 01:11

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

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