Как скопировать папку с файлами в другую папку в Unix / Linux? [закрыто]

1193

У меня возникли некоторые проблемы, чтобы скопировать папку с файлами в этой папке в другую папку. Команда cp -rне копирует файлы в папку.

user2080656
источник
Я хотел бы, чтобы это могло быть перенесено в SE, где это больше по теме.
JRH
6
Программирование на Bash по теме .
xskxzr

Ответы:

1981

Вариант, который вы ищете, это -R.

cp -R path_to_source path_to_destination/
  • Если destinationне существует, он будет создан.
  • -Rзначит copy directories recursively. Вы также можете использовать, -rтак как он не зависит от регистра.
  • Обратите внимание на нюансы с добавлением трейлинга /согласно комментарию @ muni764 .
Пьер Салагнак
источник
5
Мне интересно, почему эта точная команда в 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после того, как вы начали вводить путь, и вам либо будет предложен выбор, либо он вставит оставшуюся часть пути.

Алекс W
источник
6
Чтобы уточнить, -rопция в этом будет рекурсивно копировать каталоги.
TVann
5
Возможно ОП не указано , что он был с помощью cp -rкоманды, но он не работает должным образом?
MD XF
4
Причина, по которой я включил информацию о manpages, заключается в том, что эти флаги могут зависеть от распределения. Однако, по большей части, по- видимому -r, --recursiveи -Rявляются эквивалентными. Это также даст общие подводные камни и т. Д., Что приятно.
Алекс Ш
6
Если вы хотите скопировать СПРАВОЧНИК, а не только его содержимое, не используйте концевую черту в исходной папке, т.е. cp -r dir1 ~/Pictures/
Мехтунгух
105

Использование:

$ cp -R SRCFOLDER DESTFOLDER/
cIph3r
источник
4
это то, как я это сделал и demo1_copyеще не существовал$ ls demo1 demo3 README.md $ cp -R demo1/ demo1_copy/
HattrickNZ