3

Я иду со следующим в Баш

cp -r "/wordpress/3.0.1/" "/mySite/"

и результат - /mySite/3.0.1/ но я не хочу и не понимаю, почему 3.0.1/ появляется в целевом месте назначения.

Что я делаю неправильно?

2 ответа2

3

Это отклонение от спецификации 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 .

0

cp -r /wordpress/3.0.1/* /mySite

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .