Разница между `ls -d */` и `ls -d *`?

Разница между `ls -d */` и `ls -d *`?

Я пытаюсь понять, как работает ls -d. Я прочитал другие вопросы по ls -d, но ни в одном из них не спрашивается, почему ls -d *не работает так же, как ls -d */. Почему символ-разделитель в конце так важен?

ls *и ls */вели себя так же, поэтому я ожидал, ls -d *что и ls -d */работать будут так же.

Вместо этого, ls -d *перечисляет все файлы в текущем каталоге, как и делает ls, тогда как ls -d */перечисляет каталог в текущем каталоге. Почему это так?

решение1

ls *и ls */вести себя так же.

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

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

Шаблон *будет соответствовать каждому файлу и каталогу в текущем каталоге (за исключением скрытых файлов, начинающихся с .), при этом */будут соответствовать только каталогам (за исключением скрытых каталогов).

Переключатель -dотключает вывод списка содержимого каталогов, но файлы, переданные в ls, по-прежнему будут выводиться в списке.

решение2

Ответ таков: окончание /заставляет ls просматривать только каталоги.

Обратите внимание, что поведение одинаково (и с, и без -d).

Небольшой тест:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

А затем сделайте ls *это, ls */и вы заметите разницу.

Связанный контент