cp -r /wordpress/3.0.1/* / mySite
Eu vou com o seguinte em bash
cp -r "/wordpress/3.0.1/" "/mySite/"
e o resultado é /mySite/3.0.1/ , mas não quero nem entendo por que o 3.0.1/ aparece no destino.
O que estou fazendo de errado?
Este é um desvio da especificação POSIX , que afirma que
A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname.
Mas no Linux (ou seja, com o comando cp de GNU coreutils , cp -r foo/ bar/ age como cp -r foo bar/ em vez de cp -r foo/. bar/ quando foo é um diretório¹. (GNU coreutils não é o único culpado, apenas observei o mesmo comportamento no OpenBSD, que geralmente é bom em conformidade com padrões).
Você pode executar cp -r "/wordpress/3.0.1/." "/mySite/" (ou seja, terminar a origem com /. ) para evitar o nível 3.0.1/ . Outra possibilidade é rsync -r "/wordpress/3.0.1/" "/mySite/" .
Como um aparte, eu recomendo adquirir o hábito de cp -a em vez de cp -r se você não usar unices além do Linux e Cygwin. Quando você notar a diferença, -a (que preserva permissões e links simbólicos) é geralmente o correto. Em outros unices, use cp -Rp . Com rsync , use -a .