Я иду со следующим в Баш
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