как скопировать каталог и его содержимое в новое место под новым именем каталога?

53

Я новичок в командной строке Linux и сейчас пытаюсь разобраться с командой copy.

Может кто-нибудь сказать мне, возможно ли скопировать каталог с его подкаталогами и связанными файлами в новый каталог с новым именем, например, directory_backup?

Спасибо за любую помощь заранее

Edmuntu
источник

Ответы:

71

Вы используете -r(копировать рекурсивно) и указываете новое имя

cp -r /path/to/directory /path/to/location/new-name

заменить реальными путями ... например, скопировать stuffиз моего домашнего каталога в существующий каталог backupи дать имя новому каталогу stuff-backup(если этот каталог уже существует, обратите внимание, что stuffон будет скопирован в него, а не перезаписывается).

cp -r ~/stuff ~/backup/stuff-backup

~это ярлык для вашего домашнего каталога /home/$USERили /home/zannaв моем случае. Вы можете опустить его, если текущим рабочим каталогом является ваш домашний каталог - вы можете увидеть это в приглашении

zanna@monster:~$
              ^--the ~ here is where I am - home!

Вы можете добавить -vподробный флаг, чтобы сделать cpотчет о каждой выполняемой копии ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Занна
источник
Извините, Занна. Я воплоту ваш совет в жизнь и посмотрю, как у меня получится. Понравилась идея многословного флага. Предположим, это также будет работать в качестве отчета, в то время как другие команды работают .. Приветствия.
Edmuntu
@ Edmuntu извините за что? Да, у многих команд есть -vили --verboseфлаг :)
Zanna
извините за начальное короткое "спасибо" .... нажмите клавишу возврата по ошибке.
Edmuntu
10

Команда, которая вам нужна, просто cpозначает «копировать».

Вы можете использовать его, например, с одним из следующих синтаксисов:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

Первый вариант позволяет указать новое имя файла для целевого файла, а второй вариант создает копию с тем же именем в целевом каталоге. Конечно, вы должны сначала заменить заполнители заглавными буквами действительными путями.

Однако cpпо умолчанию работает только с файлами, а не с каталогами. Чтобы заставить его скопировать полный каталог со всем его содержимым рекурсивно, вы должны добавить -rопцию:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Вы можете узнать больше о cpкоманде, набрав man cpв своем терминале.

Byte Commander
источник
Не используется в этом разделе комментариев Byte Commander ... продолжайте нажимать кнопку возврата, чтобы изменить строку, но вместо этого отправьте сообщение. Очень четкая схема в вашем ответе. С нетерпением ждем сортировки этих каталогов сейчас, когда мне дали хорошую инструкцию по правильному использованию доступных инструментов. Отлично.
Edmuntu
@Edmuntu В будущем используйте SHIFT + ENTER при комментировании, чтобы перейти вниз по строке.
Нечетное
@OwenHines Только то, что комментарии удаляют любые разрывы строк и дополнительные пробелы, и наличие их в редакторе ничего не меняет в результате.
Byte Commander
@ByteCommander Ах да, не важно. Ну, теперь он знает.
Нечетное
6

В качестве альтернативы обычно полезной команде cp вы можете использовать rsync, который имеет дополнительное преимущество репликации разрешений / временных меток исходной структуры каталогов:

rsync -av dir/ newdir

-a архив -v многословный

обратите внимание на косую черту после исходного каталога.

slowko
источник
5

Мне легче перейти в каталог, из которого я сначала копирую. Для этого примера перейдите в каталог, который каждый вызвал /boot. Любой может скопировать и вставить команды ниже в свой терминал.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Для cpкоманды текущий каталог определяется как , .который является /bootкаталог , мы изменили в. -rОпция позволяет рекурсивной включать все подкаталоги.

Чтобы убедиться, что это работает, запустите duсписок всех подкаталогов и общие размеры файлов в новом каталоге /boot_backupв этом случае.

По завершении этого пошагового sudo rm -r /boot_backupруководства используйте: для удаления нового каталога и его подкаталогов.

WinEunuuchs2Unix
источник
1
Хотя здесь объясняется, как копировать все файлы из текущего каталога в другой каталог, он не дает полного ответа на вопрос OPS о том, как скопировать каталог (и его содержимое) в другое имя каталога. Существуют более короткие команды (например, cp -r), которые позаботятся о создании нового каталога и копировании всех файлов в него
BlueCacti
1
Он объясняет, как копировать и направлять и его содержимое - разница в том, что он сначала переключается на исходный каталог в качестве меры предосторожности. cp -rкак вы рекомендуете уже в третьей командной строке. Учебное пособие основано на том факте, что у каждого есть /bootкаталог, и он может попробовать это на своем компьютере. Если бы я использовал, cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backupчитатели не могли бы копировать и вставлять в свой терминал - у них были бы изменения, GroundZeroсоздающие больше работы и шансов на ошибку. Я надеюсь, что вы оцените ПОЦЕЛУЙ этого ответа со встроенным учебником.
WinEunuuchs2Unix
1
@GroundZero, делающий a cd ~/Documents/SomeObsucreFolder/2016/Nov/для установки текущего каталога в качестве исходного каталога, изменит подсказку терминала, чтобы убедиться, что оно написано правильно, а затем использование cp -r .в качестве источника устраняет повторный ввод исходного каталога. Это просто то, что я считаю хорошей привычкой. Кроме того , как только изменения в исходный каталог , это легко сделать ls FIleName1, ls FileName2и т.д. , чтобы esnure файлов , которые вы хотите сделать резервную копию там без необходимости повторять имя исходного каталога для lsкоманды.
WinEunuuchs2Unix
5

Вы можете использовать приведенную ниже команду для копирования каталога из одного места в другое.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Объяснение команды:

  • -R = копировать каталоги рекурсивно
  • v = объяснить, что делается
  • p = Это поможет вам сохранить ваше разрешение и право собственности с отметками времени
Ракеш С
источник
Спасибо @Ракеш Чаухан. "Сохраните свое разрешение и право собственности с временными метками" ??? Ух ты .... мне нужно добраться до него !!!! Еще один аспект линейных команд, которые необходимо изучить. Спасибо за ваш ответ.
Edmuntu
4

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

cp -R source/ destination/

Это скопирует source/папку и все ее подкаталоги в destination/.

Если destination/не существует, он будет создан.

-RФлаг означает рекурсивный, который говорит , cpчтобы скопировать все подкаталоги.

Странный
источник
Спасибо @ Оуэн Хайнс. Похоже, это определенно команда для моей задачи. Приветствия
Edmuntu
1
@ Edmuntu Рад, что я могу помочь, если вы нашли решение своей проблемы, пожалуйста, пометьте ответ, который работал для вас, как правильный, нажав на галочку под ним? Это поможет предупредить других, которые просматривают страницу вопроса, который решается.
Нечетное
1

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

cp -a file filenew
Роби
источник