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

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

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

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

Редактирование: прикрепление скриншота ls screenshot [/g0]

9
задан 12 October 2011 в 02:11

5 ответов

Согласно странице bash man:

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

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

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

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

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

ls dump

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

ls Desktop Documents Downloads Dropbox

, а дамп - это имя каталога, поэтому вы получаете список всех файлов в каталоге «dump», но когда вы даете ls D*, D * расширяется до «Desktop» Documents Downloads Dropbox ", поэтому команда становится

14
ответ дан 25 May 2018 в 23:03
  • 1
    Незначительное добавление: если в качестве аргумента указано несколько каталогов, ls отображает имя каждого каталога, прежде чем перечислять его содержимое. Это не будет сделано для одного каталога. – Marcel Stimberg 10 February 2011 в 20:17
  • 2
    Благодаря! Это очистило мое сомнение. Я сделал файл ls p*, и он обнаружил файл, потому что он существует, а ls P* показывает папку Pictures Public , так как нет файла, начинающегося с P . И когда я создал каталог с именем poo , он появился на ls p* – Ashfame 10 February 2011 в 20:29
  • 3
    Марчел, да, это тоже. Благодаря :) – Ashfame 10 February 2011 в 20:29

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

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

ls -d D*
5
ответ дан 25 May 2018 в 23:03

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

alias ld='ls -d'

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

0
ответ дан 25 May 2018 в 23:03
  • 1
    С помощью этого псевдонима вы блокируете легкий доступ к ld - The GNU linker, который не позволит OP компилировать и связывать программы. Вместо этого используйте alias lsd='ls -d'. Перед сглаживанием чего-либо, как foo, всегда делайте type foo, чтобы узнать, используется ли foo как имя для чего-либо, и решить, будет ли удобство псевдонима отменять потерю доступа к предыдущему foo – waltinator 13 January 2016 в 19:58

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

alias ld='ls -d'

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

0
ответ дан 2 August 2018 в 03:56

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

alias ld='ls -d'

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

0
ответ дан 6 August 2018 в 04:02

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

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