Каково значение точки в командах bash и чем она отличается от звездочки?

11

Я пытаюсь понять значение точки в bash и ее отличие от звездочки. Может кто-нибудь уточнить, пожалуйста? Например, в чем разница между cp -ar /foo/. /foo2/иcp -pr /foo/* /foo2/

Майк Б
источник

Ответы:

12

Точка ( .) - это просто .каталог внутри каталога, который совпадает с самим каталогом ( ls -la /fooпокажет его вам). Поэтому, если вы копируете в foo/.другое место, вы фактически копируете все дерево ниже, fooне копируя fooсебя (вы копируете его в foo2/.то же самое, что и foo2).

/foo/*расширяется оболочки в список не-скрытые файлы и каталоги в /foo, так что это будет копировать ту же структуру каталогов под /fooв , /foo2а также, для точечных файлов / dotdirs исключением. Эффективно, cpполучит (потенциально) много аргументов. Если список слишком большой, это может даже привести cpк сбою выполнения.

Стефан Шазелас
источник
Извините, но я запутался. Значит, звездочка по своей природе делает команду рекурсивной? Другими словами, cp -r /foo/*делает то же самое, что и cp /foo/* ?
Майк Б
5
@MikeB, нет, оболочка только расширяет список файлов в каталоге / foo. Это не меняет поведение cp. Используйте set -xили, echo cp -pr /foo/* /foo2чтобы увидеть, что происходит. Важно понимать, что это оболочка, которая расширяет подстановочные знаки. cpне видит звезду
Стефан Шазелас
Что насчет этого? чмод 755 -р. против chmod 755 -R *
путь в будущее