Как я могу скопировать содержимое папки в другую папку в другом каталоге, используя терминал?


740

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

Может ли кто-нибудь предоставить мне пример синтаксиса командной строки, необходимого для достижения этой цели?

Ответы:


1117

Вы можете скопировать содержимое папки /sourceв другую существующую папку /destс помощью команды

cp -a /source/. /dest/

-aВариант представляет собой усовершенствованный рекурсивный вариант, который сохраняет все атрибуты файлов, а также сохранить символические ссылки.

В .конце исходного пути указан специальный cpсинтаксис, который позволяет копировать все файлы и папки, включая скрытые.


@enzotib Я пытаюсь использовать эту команду для копирования содержимого «Downloads / textext» в «~ / .config / inkscape / extensions /». Используя вашу команду, я набираю "cp -a / Downloads / textext /. /~/.config/inkscape/extensions/." но это не работает
Funzies

@Funzies: вероятно, ваша команда должна быть:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib

Добавьте -pфлаг, чтобы сохранить права доступа к файлам и временные метки. cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Дилан Валаде

3
@DylanValade: -aуже подразумевает --preserve=all, что шире, чем -p = --preserve=mode,ownership,timestamps.
энзотиб

1
@BennyNeugebauer: scpиспользуется для копирования по сети (через ssh) и шифрует только канал связи, а не файлы в файловой системе назначения.
энзотиб

129

Альтернатива rsync

rsync -r source/ destination

Преимущества rsync:

  1. После начальной синхронизации он будет копировать только те файлы, которые были изменены.

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


5
Я думаю, вам не нужна звездочка. rsync -r source/ destinationдолжно быть достаточно, нет?
Иошуа

1
Это более уместно: 'rsync -rtvp source / * destination'
shridutt kothari

-r не работает для скрытых файлов / папок
Nam G VU

1
Это не приведет к копированию скрытых файлов, поскольку bash расширяется * только до не скрытого файла. Решение @Joschua безопаснее.
sauerburger

rsync скопирует весь каталог, включая скрытые файлы, если вы используете завершающий символ / без *, так rync source/ destчто очевидно, что люди должны будут настроить команду rsync для работы по своему усмотрению.
Пантера

78

Допустим, у вас есть папка с именем folder1~ , внутри folder1 находится 1 файл с именем file1 и 2 папки с именами sub1 и sub2, в каждой из которых находятся другие файлы и папки.

Для того, чтобы скопировать все содержимое , ~/folder1чтобы ~/new_folder1вы использовали бы

cp -r ~/folder1/. ~/new_folder1

new_folder1будет содержать все файлы и папки из folder1.

cpявляется командой для копирования с использованием терминала, -rделает ее рекурсивной (т. е. текущий каталог + дополнительные каталоги внутри текущего) ~/folder1является папкой источника, ~/new_folder1является папкой назначения для файлов / папок внутри источника.


5
он не ловит скрытые файлы
Portablejim

1
Спасибо, Бруно! Это помогло мне понять синтаксис, хотя мне пришлось немного его изменить (убрав знак ~). Возможно, потому что папка назначения была в / opt, которая находится в другой файловой системе. И спасибо Portablejim за то, что запомнили скрытый файл!
Пандисвезия

4
Конечный период важен. Без этого иногда он может создать новый подкаталог ~/new_folder1/folder1вместо копирования содержимого поверх.
Висбуки

1
Почему нетcp -r ~/folder1/* ~/new_folder1
Alex78191

@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
Бруно Перейра

14

Проверьте это http://www.cyberciti.biz/faq/copy-folder-linux-command-line/ для получения дополнительной информации о копировании папки. Надеюсь это поможет.

cp Command

cpкоманда Linux для копирования файлов и каталогов Синтаксис выглядит следующим образом:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

В этом примере скопируйте /home/vivek/lettersпапку и все ее файлы в /usb/backupкаталог:

cp -avr /home/vivek/letters /usb/backup

Где,

-a : Сохраните указанные атрибуты, такие как каталог, режим файла, владелец, временные метки, если возможно, дополнительные атрибуты: контекст, ссылки, xattr, все.

-v Объясните, что делается.

-r: Копировать каталоги рекурсивно. пример

Скопируйте папку с именем / tmp / conf в / tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup

3
Это не то, что задает вопрос.
AStopher

(Использование -r с -a является избыточным; для gnu cp -a аналогично "-dr --preserve = all")
cristoper

1
cp: опции -R и -r не могут быть указаны вместе.
Игорь Ганапольский

4

Простой пример

Скопируйте каталог dir_1 и его содержимое (_files_) в каталог dir_2 :

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

Скопируйте содержимое (_files_) только dir_1 в каталог dir_2 :

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ является заполнителем для фактических файлов, расположенных в каталоге.


2

Если есть две папки: (с правом записи)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

Если вы находитесь в папке с именем PORTAL, куда вы хотите скопировать все содержимое другой папки, скажем, DATA на том же уровне, то вы будете делать

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

Вы должны заметить 2 точки. Последняя точка говорит, что копия здесь, в данной папке

а также

один следующий / DATA /. говорит, что все СОДЕРЖАНИЕ внутри папки DATA для копирования, а не сама папка DATA.

Если вы удалите этот трейлинг "." от / ДАННЫЕ /

тогда вся папка DATA будет скопирована в ПОРТАЛ (откуда вы копируете).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.