Обновлено
•
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 будет помещен внутрь.
- Если files-backup не уже существует, он будет и внутри него будет помещено содержимое каталога files .
Создание символического ссылки вместо копирования данных
Еще один полезный прием — использовать cp для создания символических ссылок на ваши исходные файлы. Возможно, вы уже знакомы с использованием команды ln для создания символических ссылок; cp — отличный способ создать несколько символических ссылок одновременно.
cp создает символические ссылки, если вы укажете -s вариант. Так, например,
cp -s file.txt file2.txt
… создает символическую ссылку, file2.txt , который указывает на file.txt .
Вы также можете создавать символические ссылки из нескольких исходных файлов, указав каталог в качестве места назначения.
Чтобы создать символические ссылки в другом каталоге, cp необходимо указать полный путь, включая полное имя каталога, в имени исходного файла (s ). Относительные пути не работают.
Допустим, вы пользователь melissa и у вас есть набор файлов file01.txt , file02.txt и т. д. в каталоге /home/melissa/myfiles . Вы хотите создать символические ссылки на эти файлы в существующем каталоге /home/melissa/myfiles2 . Эта команда выполнит трюк:
cp -s ~/myfiles/file * .txt ~/myfiles2
Каталог myfiles2 теперь содержат символические ссылки на файл * .txt в каталоге /home/melissa/myfiles . Каталог myfiles2 должен уже существовать для успешного выполнения операции; если его не существует, cp выдает сообщение об ошибке и ничего не копируется.
Это также будет работать с рекурсивной копией. Таким образом, команда:
cp -R -s ~/myfiles ~/myfiles2
… воссоздает структуру каталогов / home/melissa/myfiles , включая все подкаталоги и их содержимое; любые файлы будут созданы как символические ссылки на оригиналы, но каталоги не являются символическими ссылками, а только обычными каталогами. Если myfiles2 уже существует, cp создает внутри него каталог с именем myfiles , который содержит структуру каталогов и символические ссылки; если myfiles2 еще не существует, он будет создан и будет содержать подкаталоги и символические ссылки на файлы, содержащиеся в myfiles .
Есть другие параметры, которые вы можете предоставить cp , которые влияют на его поведение. Они перечислены вместе с точным синтаксисом команды в следующих разделах.
Сделайте копию файла в том же каталоге
cp origfile newfile
Создает копию файла в рабочем каталоге с именем origfile . Копия будет называться newfile и будет расположена в рабочем каталоге.
Если целевой файл newfile уже существует, он будет перезаписан без запроса на подтверждение. Это поведение по умолчанию для всех операций cp .
Если вы хотите получать запрос перед перезаписью файла, используйте -i (интерактивный) вариант. Например:
cp -i oldfile newfile
Если newfile уже существует, вам будет предложено:
cp: overwrite 'newfile'?
Если вы наберете y (или yes , Y , YES или любая другая комбинация прописных и строчных букв из них), тогда newfile будет перезаписан копией исходный файл . Если ввести что-нибудь еще, операция прервется.
Копировать файл в другой каталог
cp origfile/directory/subdirectory
Создает копию файла в рабочем каталоге с именем origfile . Копия будет расположена в каталоге /directory/subdirectory и будет называться origfile .
cp origfile/directory /subdirectory/.
То же, что и указанная выше команда. Косая черта (/. ) подразумевается в приведенной выше форме команды. (Точка — это специальный файл в каждом каталоге Linux, что означает «этот каталог».)
Скопируйте файл в другой каталог и дайте ему новое имя
cp origfile/directory/subdirectory/newfile
Создает копию файла в рабочем каталоге с именем origfile . Копия будет называться newfile и будет находиться в каталоге /directory/subdirectory .
Скопируйте несколько файлов в другой каталог, используя подстановочный знак
cp file */directory/subdirectory
Скопируйте каждый файл в рабочем каталоге, имя которого начинается с file в каталог /directory/subdirectory . Звездочка (« * «) — это подстановочный знак — специальный символ, который заменяется на другие символы. В частности, подстановочный знак звездочки соответствует нулю или более непробельных символов. Например, эта команда скопирует любые файлы с именами file , file001 , file.txt , fileone.jpg , file-archive.zip и т. д.
cp file * .jpg/directory/subdirectory
Скопируйте каждый файл в рабочий каталог, имя которого начинается с file и заканчивается расширением файла .jpg . Например, он сделает копии любых файлов с именами file , file001.jpg , file002.jpg или file-new.jpg и т. д. Копии будут помещены в каталог /directory/subdirectory .
Скопируйте весь структуру каталогов в другое место
cp -R/one/two/three/four
Скопируйте каталог two (расположенный в каталог /one ) и все, что содержит two , в целевой каталог /three/four . Результат будет называться /три/четыре/два . Каталог /three должен уже существовать для успешного выполнения команды. Если каталог four еще не существует в каталоге /three , он будет создан.
cp file1.txt newdir
Копирует file1.txt из рабочего каталога в подкаталог newdir .
cp/home/public_html/mylog.txt/home/public_html/backup/mylog.bak
Копирует файл mylog.txt в public_html в каталог public_html/backup как mylog.bak .
cp -u *. txt newdir
Скопируйте все файлы, заканчивающиеся на .txt , в каталог newdir , но только если файлы еще не существуют в новом каталоге или если копируемые файлы более новые.
cp -R/home/hope/files/*/home/hope/backup
Рекурсивно копирует все файлы, каталоги и подкаталоги из каталога /home/hope/files в каталог /home/hope/backup . Если каталог backup не существует в каталоге /home/hope , он будет создан.
cp —backup origfile newfile
Если newfile уже существует, сделайте резервную копию существующего newfile , прежде чем перезаписать его копией origfile . По умолчанию резервная копия newfile будет называться newfile ~ .
cp —backup = numbered origfile newfile
Если newfile уже существует, сделайте резервную копию существующего newfile , прежде чем перезаписывать его копией origfile . Резервная копия newfile будет называться newfile. ~ 1 ~ , если другой резервной копии не существует, или newfile. ~ 2 ~ если существует newfile. ~ 1 ~ и т. д.
dd — копирование и преобразование кодировки файлов.
ln — создание ссылки или символической ссылки на файл или каталог.
mv — перемещение файлов и каталогов из одно место в другое и при желании переименовать их.