Мне интересно, почему эта точная команда в dockerfile копирует все файлы исходного каталога в место назначения, а не копирует только весь каталог.
Holms
4
Я считаю, что «/» в конце имеет значение, и это может объяснить ваш опыт. Если источник содержит косую черту, он скопирует только то, что находится в каталоге. Если он не включает в себя завершающий слеш, он также скопирует каталог, а затем содержимое внутри него. Моя память такова, что это поведение зависит от команды и, возможно, от ОС. Вот ссылка с дополнительной информацией.
OllieBrown
23
Я бы сказал, что если вы не хотите включать источник и хотите убедиться, что все скопировано (символические ссылки, скрытые файлы) без копирования исходной родительской папки, используйте параметр -ra source /. пункт назначения. Это обеспечит копирование содержимого папки, но не самой родительской папки, что иногда удобно. И разница в /.
muni764
Это также, кажется, работает правильно, если каталоги, которые нужно скопировать, являются символическими ссылками, что было моим вариантом использования.
Гдаля
3
Обратите внимание на важность «косой черты» в вашем источнике, cp -r src/. destя знаю, что она упоминается, но я все еще, кажется, пропускаю ее каждый раз.
bbeecher
369
Вы ищете cpкоманду. Вам нужно изменить каталоги так, чтобы вы находились за пределами каталога, который вы пытаетесь скопировать.
Если каталог, который вы копируете, называется dir1и вы хотите скопировать его в свою /home/Picturesпапку:
cp -r dir1/ ~/Pictures/
Linux чувствителен к регистру и также должен /знать после каждого каталога, что это не файл. ~это специальный символ в терминале, который автоматически оценивает домашний каталог текущего пользователя. Если вам нужно знать, в каком каталоге вы находитесь, используйте команду pwd.
Если вы не знаете, как использовать команду Linux, есть страница руководства, на которую вы можете перейти, набрав:
man [insert command here]
в терминальной подсказке.
Кроме того, чтобы автоматически заполнять длинные пути к файлам при вводе в терминале, вы можете нажать Tabпосле того, как вы начали вводить путь, и вам либо будет предложен выбор, либо он вставит оставшуюся часть пути.
Чтобы уточнить, -rопция в этом будет рекурсивно копировать каталоги.
TVann
5
Возможно ОП не указано , что он был с помощью cp -rкоманды, но он не работает должным образом?
MD XF
4
Причина, по которой я включил информацию о manpages, заключается в том, что эти флаги могут зависеть от распределения. Однако, по большей части, по- видимому -r, --recursiveи -Rявляются эквивалентными. Это также даст общие подводные камни и т. Д., Что приятно.
Алекс Ш
6
Если вы хотите скопировать СПРАВОЧНИК, а не только его содержимое, не используйте концевую черту в исходной папке, т.е. cp -r dir1 ~/Pictures/
Ответы:
Вариант, который вы ищете, это
-R
.destination
не существует, он будет создан.-R
значитcopy directories recursively
. Вы также можете использовать,-r
так как он не зависит от регистра./
согласно комментарию @ muni764 .источник
cp -r src/. dest
я знаю, что она упоминается, но я все еще, кажется, пропускаю ее каждый раз.Вы ищете
cp
команду. Вам нужно изменить каталоги так, чтобы вы находились за пределами каталога, который вы пытаетесь скопировать.Если каталог, который вы копируете, называется
dir1
и вы хотите скопировать его в свою/home/Pictures
папку:Linux чувствителен к регистру и также должен
/
знать после каждого каталога, что это не файл.~
это специальный символ в терминале, который автоматически оценивает домашний каталог текущего пользователя. Если вам нужно знать, в каком каталоге вы находитесь, используйте командуpwd
.Если вы не знаете, как использовать команду Linux, есть страница руководства, на которую вы можете перейти, набрав:
в терминальной подсказке.
Кроме того, чтобы автоматически заполнять длинные пути к файлам при вводе в терминале, вы можете нажать Tabпосле того, как вы начали вводить путь, и вам либо будет предложен выбор, либо он вставит оставшуюся часть пути.
источник
-r
опция в этом будет рекурсивно копировать каталоги.cp -r
команды, но он не работает должным образом?-r
,--recursive
и-R
являются эквивалентными. Это также даст общие подводные камни и т. Д., Что приятно.cp -r dir1 ~/Pictures/
Использование:
источник
demo1_copy
еще не существовал$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/