Я пытаюсь понять значение точки в bash и ее отличие от звездочки. Может кто-нибудь уточнить, пожалуйста? Например, в чем разница между cp -ar /foo/. /foo2/
иcp -pr /foo/* /foo2/
11
Точка ( .
) - это просто .
каталог внутри каталога, который совпадает с самим каталогом ( ls -la /foo
покажет его вам). Поэтому, если вы копируете в foo/.
другое место, вы фактически копируете все дерево ниже, foo
не копируя foo
себя (вы копируете его в foo2/.
то же самое, что и foo2
).
/foo/*
расширяется оболочки в список не-скрытые файлы и каталоги в /foo
, так что это будет копировать ту же структуру каталогов под /foo
в , /foo2
а также, для точечных файлов / dotdirs исключением. Эффективно, cp
получит (потенциально) много аргументов. Если список слишком большой, это может даже привести cp
к сбою выполнения.
cp -r /foo/*
делает то же самое, что иcp /foo/*
?set -x
или,echo cp -pr /foo/* /foo2
чтобы увидеть, что происходит. Важно понимать, что это оболочка, которая расширяет подстановочные знаки.cp
не видит звезду