Я иду со следующим в Баш
cp -r "/wordpress/3.0.1/" "/mySite/"
и результат - /mySite/3.0.1/ но я не хочу и не понимаю, почему 3.0.1/ появляется в целевом месте назначения.
Что я делаю неправильно?
Я иду со следующим в Баш
cp -r "/wordpress/3.0.1/" "/mySite/"
и результат - /mySite/3.0.1/ но я не хочу и не понимаю, почему 3.0.1/ появляется в целевом месте назначения.
Что я делаю неправильно?
Это отклонение от спецификации POSIX, которая гласит, что
Имя пути, которое содержит как минимум один символ без косой черты и заканчивается одним или несколькими завершающими слешами, должно быть разрешено, как если бы к имени пути был добавлен один символ точки ('.').
Но в Linux (то есть с помощью команды cp из GNU coreutils, cp -r foo/ bar/ действует как cp -r foo bar/ а не cp -r foo/. bar/ когда foo является каталогом¹). (GNU coreutils не единственный виновник, я только что наблюдал такое же поведение в OpenBSD, которое обычно хорошо соответствует стандартам).
Вы можете запустить cp -r "/wordpress/3.0.1/." "/mySite/" (т.е. завершите источник с помощью /.), чтобы избежать уровня 3.0.1/ . Другая возможность - rsync -r "/wordpress/3.0.1/" "/mySite/" .
Кроме того, я рекомендую привыкнуть к cp -a а не к cp -r если вы не используете Unix, кроме Linux и Cygwin. Когда вы замечаете разницу, -a (которая сохраняет разрешения и символические ссылки) обычно является правильной. На других юнитах используйте cp -Rp . С rsync используйте -a .
cp -r /wordpress/3.0.1/* /mySite