В чем разница между

ls /example or ls /example/

против

ls -d /example/*

Почему они дают (почти) одинаковый результат?

2 ответа2

2

В первом случае вы даете ls каталог и просите показать его содержимое.

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

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


У Ls есть два режима: когда передается файл, он показывает только этот файл; когда дан каталог, он показывает содержимое этого каталога (один уровень глубиной).

Ваш /example является каталогом, поэтому при использовании ls /example ls покажет его содержимое. Опция -d отключает это поведение и заставляет ls всегда показывать только данный элемент, независимо от того, файл это или нет.

(Сравните: ls -l /etc и ls -l -d /etc)

Но когда вы используете ls -d /example/* , вы не просите его показать каталог - вы даете ему список отдельных элементов для показа. Подстановочные знаки расширяются вашей оболочкой до запуска команды, поэтому вы действительно запускаете команду ls -d /example/file1 /example/file2 /example/file3 .

1

Когда аргументом ls является каталог, ls входит в каталог и выводит список содержимого каталога, если он не был вызван с -d . И помните, что расширение имени файла ('file *') выполняется в оболочке перед вызовом ls, поэтому у вас есть:

dir
├── file1
└── subdir
    └── file2
  • ls dir перечисляет содержимое dir (одна строка для file1 , одна для subdir)
  • ls -d dir только перечисляет dir (в одной строке)
  • ls dir/* раскрывается в ls dir/file1 dir/subdir и, таким образом, раскрывает subdir для отображения его содержимого
  • ls -d dir/* расширяется до ls dir/file1 dir/subdir , но из-за того, что -d subdir не раскрывается, отображаются только file1 и subdir (поэтому вы получите тот же вывод, что и в первом случае)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .