При копировании с использованием 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 есть../
там. Отчасти (большая) разница.