Обновлено
•
4 мин чтения
При работе в системах Linux и Unix копирование файлов и каталогов — одна из наиболее распространенных задач, которые вы будете выполнять ежедневно.
cp — это утилита командной строки для копирования файлов и каталогов в системах Unix и Linux.
В этой статье мы объясним, как использовать cp .
Как использовать cp command #
Общий синтаксис для cp выглядит следующим образом:
cp [OPTIONS] SOURCE ... DESTINATION
SOURCE может содержать один или несколько файлов или каталогов в качестве аргументов, а аргумент DESTINATION может быть одним файлом или каталогом.
- Когда SOURCE и
DESTINATIONявляются файлами, командаcpкопирует первый файл во второй. Если файл не существует, команда создает его. - Когда
SOURCEимеет несколько файлов или каталогов в качестве аргументов,DESTINATION Аргумент code> должен быть каталогом. В этой ситуации файлы и каталогиSOURCEперемещаются в каталогDESTINATION. - Когда
Аргументы SOURCEиDESTINATIONявляются каталогами, командаcpкопирует первый каталог во второй.
Чтобы копировать файлы и каталоги, у вас должны быть как минимум разрешения на чтение исходного файла и разрешение на запись в целевой каталог. В противном случае отображается ошибка отказа в разрешении.
Копирование файлов с помощью команды cp #
Самый простой сценарий использования cp — это для копирования файла в текущий рабочий каталог. Например, чтобы скопировать файл с именем file.txt в file_backup.txt , вы должны выполнить следующую команду:
cp файл file_backup
или
cp file {, _ backup}
Чтобы скопировать файл в другой каталог, укажите абсолютный или относительный путь к целевому каталогу.
Когда в качестве места назначения указано только имя каталога, скопированный файл имеет то же имя как исходный файл.
В следующем примере мы копируем файл file.txt в каталог /backup :
cp file.txt/backup
Если вы хотите скопировать файл под другим именем, вам необходимо указать желаемое имя файла. Приведенная ниже команда скопирует файл в указанный каталог как new_file.txt .
cp file.txt/backup/new_file.txt
По умолчанию, если целевой файл существует, он перезаписывается. Параметр -n указывает cp не перезаписывать существующий файл.
Чтобы заставить cp , чтобы запросить подтверждение, используйте параметр -i .
cp -i file.txt file_backup.txt
Если вы хотите скопировать файл, только если он новее, чем место назначения, используйте параметр -u :
cp -u file.txt file_backup.txt
При копировании файла новый файл принадлежит пользователю, выполняющему команду. Используйте параметр -p , чтобы сохранить режим файла, право собственности и временные метки:
cp -p file.txt file_backup.txt
Другой вариант, который может быть полезен, — это -v , который сообщает cp печатать подробный вывод:
cp -v file.txt file_backup.txt
'file.txt' -> 'file_backup.txt'
Копирование каталогов с помощью команды cp #
Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте -R или -r option.
В следующем примере мы копируем каталог Pictures в Pictures_backup :
cp -R Pictures Pictures_backup
Приведенная выше команда создает целевой каталог и рекурсивно копирует все файлы и подкаталоги от источника до каталога назначения.
Если каталог назначения уже существует, сам исходный каталог и все его содержимое будут c в целевом каталоге.
Чтобы скопировать только файлы и подкаталоги, но не исходный каталог, используйте параметр -T :
cp -RT Pictures Pictures_backup
Другой способ скопировать только содержимое каталога, но не сам каталог — использовать подстановочный знак ( * ). Недостатком следующей команды является то, что она не копирует скрытые файлы и каталоги (те, которые начинаются с точки . ):
cp -RT Pictures/* Pictures_backup/
Все параметры, которые мы использовали в предыдущем разделе при копировании файлов, также могут использоваться при копировании каталогов. Основное отличие в том, что при копировании каталогов. вам всегда нужно использовать параметр -R .
Копировать несколько файлов и каталогов #
Чтобы скопировать несколько файлов и каталогов в один раз укажите их имена и используйте каталог назначения в качестве последнего аргумента:
cp file.txt dir file1.txt dir1
При копировании нескольких файлов местом назначения должен быть каталог.
Заключение #
Копирование файлов и каталогов с помощью команды cp это простая задача. Для получения информации обо всех доступных параметрах cp введите man cp в своем терминале.
Чтобы скопировать файлы по сети, используйте утилиты rsync и scp .
Если у вас есть вопросы или отзывы, не стесняйтесь оставлять комментарии.
Команда Linux cp

В Unix-подобных операционных системах команда cp создает копии файлов и каталогов.
На этой странице описана версия cp для GNU/Linux.
Описание
Общая форма команда — это cp source destination , например:
cp myfile.txt myfilecopy .txt
Как и многие другие основные команды Linux, если команда cp выполнена успешно, по умолчанию вывод не отображается. Для просмотра вывода при копировании файлов используйте параметр -v (подробный).
По умолчанию cp перезаписывает файлы без запроса. Если имя файла назначения уже существует, его данные будут уничтожены. Если вы хотите получать запрос на подтверждение перед перезаписью файлов, используйте параметр -i (интерактивный).
Синтаксис
cp [ option ] ... [ -T ] source назначение
cp [ option ] ... source ... каталог
cp [ option ] ... -t каталог source ...
cp - справка
cp --version
Параметры
| -a , — архив |
То же, что и -dR —preserve = ВСЕ . При выполнении копирования постарайтесь сохранить как можно больше исходной файловой структуры, атрибутов и связанных метаданных. Эти метаданные включают данные контекста безопасности, если вы используете SELinux. | ||||||||||||||
| — только атрибуты | Не копируйте данные файла, только создайте файл с такими же атрибутами. Если целевой файл уже существует, не изменяйте его содержимое. Вы можете контролировать, какие именно атрибуты копируются, с помощью параметра — сохранить . | ||||||||||||||
| — резервное копирование [ = control ] |
Сделайте резервную копию каждого существующего файла назначения, который в противном случае был бы перезаписан или удален . Параметр control указывает, какой метод контроля версий использовать; подробности см. в управлении версиями.
В особом случае cp —force —backup создает резервную копию источника когда source и dest одинаковы, обычный файл. |
||||||||||||||
| -b | Подобно — backup , но не принимает аргумент control ; всегда используется метод управления по умолчанию. | ||||||||||||||
| — copy-contents | Когда работая рекурсивно, скопируйте содержимое специальных файлов, таких как FIFO и устройства, найденные в /dev . Обычно вы не хотите использовать этот параметр, потому что он может привести к нежелательным результатам, например, к зависанию или заполнению всего диска. Однако этот вариант доступен для особых, опытных случаев использования.. | ||||||||||||||
| -d | Копируйте сами символические ссылки, а не файлы, на которые они ссылаются , и сохранить жесткие связи между исходными файлами в копиях. То же, что и « — no-dereference —preserve = links «. | ||||||||||||||
| -f , — принудительно |
Если не удается открыть существующий целевой файл, удалите его и повторите попытку. Этот параметр не действует, если используется параметр -n / — no-clobber . Однако он применяется независимо от -i / — interactive ; ни один из вариантов не отменяет действие другого. | ||||||||||||||
| -i , — -interactive |
Запрашивать перед перезаписью (отменяет предыдущий параметр -n ). | ||||||||||||||
| -H |
Следуйте символическим ссылкам, указанным в командной строке, но сохраняйте обнаруженные ссылки.
Если одна из аргументы в командной строке — это символическая ссылка, скопируйте указанный файл, а не саму ссылку. Однако, если символическая ссылка обнаруживается во время рекурсивного обхода, она копируется как символическая ссылка, а не как обычный файл. |
||||||||||||||
| -l , — ссылка |
Создавать жесткие ссылки на файлы вместо их копирования. | ||||||||||||||
| -L , — разыменование |
Всегда переходить по символическим ссылкам в источник ; если source является символической ссылкой, скопируйте файл, на который есть ссылка, а не саму символическую ссылку. Если указан этот параметр, cp не может создавать символические ссылки в целевых копиях. | ||||||||||||||
| -n , — no-clobber |
Не перезаписывать существующий файл. Если ранее было указано -i / — interactive , этот параметр отменяет его. Этот параметр нельзя указать с помощью -b / — backup , поскольку резервные копии создаются только тогда, когда файл будет перезаписан. | ||||||||||||||
| -P , — без разыменования |
Никогда не переходите по символическим ссылкам в источнике ; копировать символические ссылки как символические ссылки. Однако существующие символические ссылки, обнаруженные в пункте назначения, все еще могут отслеживаться. | ||||||||||||||
| -p | То же, что и —preserve=mode,ownership, timestamps. | ||||||||||||||
| — preserve = [ attr_list ] |
Сохранить указанные атрибуты, разделенные запятой. Атрибуты:
Если не указано иное, значением по умолчанию для attr_list является « режим, владение, отметки времени ». |
||||||||||||||
| — no-preserve = attr_list | Не сохранять указанные атрибуты. | ||||||||||||||
| — родители |
Создать отсутствующие родительские каталоги в месте назначения , при необходимости, при копировании в целевой каталог , в соответствии с путем, указанным в source .
Например, » cp —parents dir2/dir3/file dir1 «создает файл назначения» dir1/dir2/dir3/file «, даже если dir2 и dir3 в настоящее время не существуют в dir1. |
||||||||||||||
| -R , -r , — рекурсивно |
Рекурсивно копировать каталоги. | ||||||||||||||
| — reflink = [ w hen ] |
Выполнить оптимизированное клонирование CoW («копирование при записи»), если файловая система назначения поддерживает это. Результирующая копия будет использовать те же байты на диске, что и исходный файл, пока копия не будет изменена. Имейте в виду, что это означает, что если исходные байты повреждены, место назначения будет совместно использовать поврежденные данные.
Параметр when определяет, что произойдет, если копирование на -write не поддерживается файловой системой назначения. Если when — всегда (по умолчанию), копирование не выполняется. Если auto , копирование будет продолжено с использованием стандартного поведения копирования. |
||||||||||||||
| — remove-destination | Удалите каждый существующий целевой файл перед попыткой его открытия (в отличие от параметра — force , который удаляет конечный файл только после неудачной попытки open). | ||||||||||||||
| — sparse = when |
Управление созданием разреженных файлов.
Разреженный файл содержит «дыры», где дыра — это последовательность нулевых байтов, не занимающая места на физическом диске. При чтении файла дыры читаются как нули. Это может сэкономить место на диске, поскольку многие файлы содержат длинные последовательности нулей. По умолчанию cp обнаруживает разреженные файлы и также создает разреженные файлы назначения. Параметр when определяет, что cp должен выполняться, когда обнаруживается, что исходный файл является разреженным:
|
||||||||||||||
| — полоса в конце -slashes | Удалите все завершающие слэши из каждого аргумента source . | ||||||||||||||
| -s , — symbolic-link |
Делайте символические ссылки вместо копирования самих файлов . Все исходные файлы должны иметь абсолютные пути, начинающиеся с косой черты, за исключением случаев, когда файлы назначения находятся в текущем каталоге. | ||||||||||||||
| -S , — суффикс = суффикс |
Заменить обычный суффикс резервной копии. | ||||||||||||||
| -t , — target-directory = directory |
Скопируйте все аргументы source в directory | ||||||||||||||
| -T , — no-target-directory |
Лечить назначение как обычный файл. | ||||||||||||||
| -u , — обновить |
Копировать только в том случае, если исходный файл новее, чем файл назначения, или когда файл назначения отсутствует. | ||||||||||||||
| -v , — подробный |
Подробный режим; объясните, что делается. | ||||||||||||||
| -x , — one- файловая система |
Работайте только с файловой системой, в которой была выполнена команда. Если cp пытается перейти границу с другой файловой системой, эти файлы будут пропущены. Сюда входят сетевые диски, другой раздел — любой файл, который находится в файловой системе с другой точкой монтирования .
Копируется каталог, представляющий саму точку монтирования, но не пройден. Если указано -v , вы увидите, какие именно файлы пропущены. |
||||||||||||||
| — help | Отобразить справочное сообщение и выйти. | ||||||||||||||
| — версия | Вывести информацию о версии и выйти. |
По умолчанию разреженные исходные файлы обнаруживаются грубой эвристикой, и соответствующий целевой файл также становится разреженным. Это поведение, выбранное параметром — sparse = auto . Укажите — sparse = always , чтобы создать разреженный целевой файл, когда исходный файл содержит достаточно длинную последовательность нулей. байтов. Используйте — sparse = never , чтобы запретить создание разреженных файлов.
Если указано — reflink [ = always ], cp выполняет облегченная копия, где блоки данных копируются только при изменении. Если это невозможно, копия не работает; или, если указано — reflink = auto , cp возвращается к стандартной операции копирования.
Контроль версий
При использовании -b / — backup суффикс резервной копии будет ‘ ~ ‘, если не задано с помощью — суффикс или SIMPLE_BACKUP_SUFFIX . Метод контроля версий можно выбрать с помощью параметра — backup = control или с помощью переменной среды VERSION_CONTROL . Возможные значения control или VERSION_CONTROL :
| none , off | Никогда не создавайте резервные копии (даже если задано — backup ). |
| пронумерованные , t | Создавать пронумерованные резервные копии. |
| существующий , nil | Пронумерованные , если существуют пронумерованные резервные копии, простые в противном случае. |
| простые , никогда | Всегда делать простые резервные копии. |
В особом случае cp создает резервную копию source , когда заданы параметры force и backup и source и destination — это одно и то же имя для существующего обычного файла.
Примеры
Допустим, у вас есть файл с именем picture.jpg в вашем рабочем каталоге, и вы хотите сделать его копию с именем picture-02.jpg . Вы должны запустить команду:
cp picture.jpg picture-02.jpg
… и файл будет скопирован. Здесь picture.jpg — это источник операции копирования, а picture-02.jpg — это место назначения. Оба файла теперь существуют в вашем рабочем каталоге.
Исходный и целевой файлы также могут находиться в разных каталогах. Например,
cp/home/chuck/pictures/picture.jpg/home/chuck/backup/picture.jpg
..создает копию файл /home/chuck/pictures/picture.jpg в каталоге /home/chuck/backup . Целевой файл также называется picture.jpg .
Если вы пользователь chuck , вы можете сократить свой домашний каталог («/home/chuck «) с использованием тильды (« ~ «). Например,
cp ~/pictures/picture.jpg ~/backup/picture.jpg
… при запуске работает так же, как указанная выше команда by chuck .
Копирование нескольких файлов в каталог
Или, возможно, вы хотите скопировать несколько файлы в другой каталог. Для этого вы можете указать несколько файлов в качестве источника и имя каталога в качестве места назначения. Допустим, вы пользователь sally , и у вас есть куча файлов в каталоге /home/sally/pictures/ с именем picture. -01.jpg , picture-02.jpg и т. Д.. и вы хотите скопировать их в каталог /home/sally/picture-backup/. Эта команда выполнит трюк:
cp ~/pictures/picture - *. Jpg ~/picture-backup
Здесь мы используем подстановочный знак (звездочку, « * «), чтобы указать, что исходные файлы — это все файлы в каталоге /home/sally/pictures , имя которого начинается с « picture- «и имеет расширение» .jpg «. Они копируются в каталог /home/sally/picture-backup , если этот каталог уже существует. Если он не существует, cp выдает сообщение об ошибке, а файлы не копируются.
Вы также можете указать несколько исходных файлов один за другим, и cp будет ожидать, что последний аргумент — это имя каталога, и скопирует их все туда. Например,
cp ~/pictures/picture-01.jpg ~/pictures/picture-02.jpg ~/picture-backup
… скопирует только эти два файла, /home/sally/picture-01.jpg и /home/sally/picture-02.jpg , в каталог /home/sally/picture-backup .
Рекурсивное копирование файлов
Вы можете использовать cp для копирования целых структур каталогов из одного места в другое с помощью параметра -R для выполнения рекурсивного копирования. Допустим, вы пользователь steve и у вас есть каталог /home/steve/files , содержащий множество файлов и подкаталогов. Вы хотите скопировать все эти файлы и все подкаталоги (а также файлы и подкаталоги, которые они содержат) в новое место, /home/steve/files-backup . Вы можете скопировать их все с помощью команды:
cp -R ~/files ~/files-backup
… и вся структура каталогов копируется в каталог /home/steve/files-backup . При выполнении рекурсивного копирования:
- Если каталог files-backup уже существует, каталог files будет помещен внутрь.




