Com o GNU cp , a opção -T é usada para garantir que o diretório de origem não seja colocado dentro do diretório de destino. Não fará com que o conteúdo do diretório de destino seja removido.
A documentação informativa sobre isso ( info '(coreutils)Target directory' ) diz (está usando mv como exemplo):
-T
--no-target-directoryDo not treat the last operand specially when it is a directory or a symbolic link to a directory. This can help avoid race conditions in programs that operate in a shared area. For example, when the command
mv /tmp/source /tmp/destsucceeds, there is no guarantee that/tmp/sourcewas renamed to/tmp/dest: it could have been renamed to/tmp/dest/sourceinstead, if some other process created/tmp/destas a directory. However, ifmv -T /tmp/source /tmp/destsucceeds, there is no question that/tmp/sourcewas renamed to/tmp/dest.
Observe que mv -T source dest falhará se dest não estiver vazio.
Para substituir o conteúdo de bar pelo de foo no seu exemplo, use
rm -rf bar
cp -r foo bar
ou
rsync --archive --delete foo/ bar