Команда cp в Linux (копирование файлов)

Команда cp в Linux (копирование файлов)
На чтение
65 мин.
Просмотров
18
Дата обновления
11.11.2024

Обновлено

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 .

Если у вас есть вопросы или отзывы, не стесняйтесь оставлять комментарии.

cp terminal


Команда 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 ] Сохранить указанные атрибуты, разделенные запятой. Атрибуты:

mode Сохранять биты режима файла (как установлено с chmod ) и любые ACL.
владение Сохранить владельца и группу (как установлено с помощью chown ). Возможность сохранения этих атрибутов ограничена так же, как при использовании chown.
меток времени Сохранить время последнего доступа к файлу и его модификации ( atime и mtime , как установлено с помощью коснитесь ), если возможно.
ссылки Сохранить в файлы назначения любые ссылки между исходными файлами. С помощью -L или -H этот параметр потенциально может копировать символические ссылки как жесткие.
context Сохранять контекст безопасности SELinux для исходных файлов или завершиться ошибкой с подробной диагностикой.
xattr Сохранять расширенные атрибуты исходных файлов или выполнить подробную диагностику с ошибкой.
all Сохраните все вышеперечисленное. То же самое, что и указание всех вышеперечисленных атрибутов по отдельности, за исключением того, что неудачное копирование context или xattr не приведет к завершению статуса отказа.

Если не указано иное, значением по умолчанию для 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 — перемещение файлов и каталогов из одно место в другое и при желании переименовать их.

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий