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