При копировании с использованием cp -a source/* target/вы копируете большинство файлов и каталогов из sourceв target. В частности, исключаемые элементы, вероятно, будут файлами, начинающимися с точки ( .) на верхнем уровне source.
Рассмотрим эти файлы (или каталоги) в source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
При копировании с использованием cp -a source/. target/вы копируете все содержимое source, включая любые элементы, начинающиеся с точки ( .), вtarget
Рассмотрим эти файлы (или каталоги) в source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Если вы используете bash, zshвы можете использовать эту dotglobопцию, чтобы изменить значение *так, чтобы она включала файлы и каталоги, начинающиеся с точки ( yashтакже есть dotglobопция; однако она затем включает .и ..в глобальные расширения, которые ограничивают ее удобство использования. См. Также FIGNORE='@(.|..)'в ksh93)
Интересно, cp -a source/. target/что гарантированно никогда не будет создан компонент target/source. (С другой стороны, cp -a source target/будет делать одно из двух в зависимости от того, существует он или нет target. См. Как рекурсивно копировать папку идемпотентным способом, используя cp для деталей.)
При удалении с помощью вы удаляете rm -rf source/*файлы и каталоги внутри, sourceкоторые не начинаются с точки ( .). С учетом dotglobнастроек, которые я уже упоминал. Он не удалит сам каталог source.
Когда вы попытаетесь удалить rm -rf source/.его, он потерпит неудачу - как уже объяснили другие - потому что POSIX запрещает удаление пути, последний компонент которого .или ... Ближайшим эквивалентом является rm -rf sourceудаление sourceкаталога и всего его содержимого независимо от того, начинаются они с точки или нет ..
It's up to the command whether that trailing dot makes any senseХм, точка всегда ссылается на сам каталог, в котором она находится, поэтому она../foldersource/.не должна отличаться от описания./foldersource/и, фактически, это просто избыточный способ заявить одно и то же. Ни одна команда не пытается «разобраться» с точкой или двойной точкой, поскольку они являются стандартными в файловых системах Linux / Unix.rmпросто отклоняет удаление текущего рабочего каталога, какjimmijуказано в их ответе. Кроме того, обратите внимание, что вы используете./во всех своих примерах, в то время как OP есть../там. Отчасти (большая) разница.