Копирование в Linux: упрощение с помощью CP

Каждый, кто хочет работать с командной строкой в одном из многочисленных дистрибутивов с открытым исходным кодом, основанных на Linux, должен ознакомиться с множеством команд Linux. Они позволяют перемещаться по структуре папок, редактировать данные или копировать файлы и каталоги. Команда CP (сокращение от «copy») позволяет создавать копии выбранных файлов или целых папок.

Зачем нужна команда CP в Linux?

Копирование файлов и папок является одной из основ любой операционной системы и выполняется большинством пользователей ежедневно. Копии используются для обмена файлами с другими людьми или для их резервного копирования. Обычно этот инструмент является неизменной (и уже установленной) частью каждой установки Linux — независимо от того, какой дистрибутив вы используете. CP принадлежит к пакету GNU Core Utilities (сокращенно: «coreutils»). Этот пакет с наиболее важными инструментами доступен для свободного использования.

Синтаксис в Linux CP

Основная функция CP проста: скопировать один или несколько файлов в указанное пользователем место. Для этого важны две части информации: имя объекта и место назначения действия. Синтаксис CP построен следующим образом:

cp [Original] [Destination]

Для этого перейдите в каталог файла, который необходимо скопировать, а затем укажите в команде имя файла и путь, по которому должен быть сохранен новый файл.

cp text.txt /home/user/destinationfolder/

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

cp text1.txt text2.txt text3.txt /home/user/destinationfolder/

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

cp text.txt /home/user/destinationfolder/text_copy.txt

Если вы опустите путь к папке назначения, копия будет создана с новым именем файла в той же папке, что и исходный файл.

cp text1.txt text2.txt

Специальные функции CP

Команда Linux CP может похвастаться еще большим количеством функций. Для этого вы используете поле опций:

cp [Option(s)] [Original(s)] [Destination]

В поле можно ввести следующие параметры (флаги), чтобы сделать работу по копированию более объемной или более простой.

Параметр Описание Пример
-a Копирует файл с теми же параметрами разрешения и метаданными, что и оригинал. cp -a text.txt /home/user/destinationfolder/
—archive Копирует файл с теми же параметрами разрешения и метаданными, что и оригинал. cp —archive text.txt /home/user/destinationfolder/
-b Создает копию в буфере, если оригинал и место назначения имеют одинаковое имя файла, но разное содержимое. cp -b text.txt /home/user/destinationfolder/
—backup Создает копию в буфере, если исходный и конечный файлы имеют одинаковое имя, но разное содержимое. cp —backup text.txt /home/user/destinationfolder/
—backup=numbered Создает новый нумерованный файл, если исходный и конечный файлы имеют одинаковое имя, но разное содержимое. cp —backup==numbered text.txt /home/user/destinationfolder/
—backup=existing Создает новый пронумерованный файл, если исходный и конечный файлы имеют одинаковое имя, но разное содержимое, и уже есть пронумерованные резервные копии. cp —backup==existing text.txt /home/user/destinationfolder/
-d Копирует символические ссылки. cp -d text.txt /home/user/destinationfolder/
-f Принудительная перезапись при копировании. cp -f text.txt /home/user/destinationfolder/text.txt
—force Принудительная перезапись при копировании. cp —force text.txt /home/user/destinationfolder/text.txt
-i Запрашивает разрешение перед перезаписью одноименных файлов. cp -i text.txt /home/user/destinationfolder/
-интерактивный Запрашивает разрешение перед перезаписью файлов с тем же именем. cp —interactive text.txt /home/user/destinationfolder/
-l Создает жесткую ссылку вместо копии. cp -l text.txt /home/user/destinationfolder/
—link Создает жесткую ссылку вместо копии. cp —link text.txt /home/user/destinationfolder/
-n Существующие файлы никогда не перезаписываются. cp -n text.txt /home/user/destinationfolder/
—no-cobbler Существующие файлы никогда не перезаписываются. cp -no-cobbler text.txt /home/user/destinationfolder/
-p При копировании наследуются атрибуты исходного файла. cp -p text.txt text1.txt
—preserve Атрибуты исходного файла наследуются при копировании. cp —preserve text.txt text1.txt
—preserve=mode Режим исходного файла наследуется при копировании. cp —preserve==mode text.txt text1.txt
—preserve=ownership При копировании наследуется право собственности исходного файла. cp —preserve==ownership text.txt text1.txt
—preserve=timestamp Временная метка исходного файла наследуется при копировании. cp —preserve==timestamp text.txt text1.txt
—preserve=links При копировании наследуются ссылки исходного файла. cp —preserve==links text.txt text1.txt
—preserve=context При копировании наследуется контекст безопасности исходного файла. cp —preserve==context text.txt text1.txt
—preserve=xattr При копировании наследуются расширенные атрибуты исходного файла. cp —preserve==xattr text.txt text1.txt
—preserve=all При копировании наследуются все атрибуты исходного файла. cp —preserve==all text.txt text1.txt
-P Символьные ссылки сохраняются как таковые. cp -P text.txt /home/user/destinationfolder/
—no-dereference Символьные ссылки сохраняются как таковые. cp —no-dereference text.txt /home/user/destinationfolder/.
-r Каталоги копируются рекурсивно, включая подкаталоги. cp -r /home/user/originalfolder/ /home/user/destinationfolder/
-R Каталоги копируются рекурсивно, включая подкаталоги. cp -R /home/user/originalfolder/ /home/user/destinationfolder/
—recursive Каталоги копируются рекурсивно, включая подкаталоги. cp —recursive /home/user/originalfolder/ /home/user/destinationfolder/
-s Создает символическую ссылку на исходный файл. cp -s text.txt /home/user/destinationfolder/
-символическая ссылка Создает символическую ссылку на исходный файл. cp —symbolic-link text.txt /home/user/destinationfolder/
-S Перезаписывает суффикс резервной копии при копировании с помощью —backup. cp —backup=simple -S text.txt /home/user/destinationfolder/
-суффикс=собственный_суффикс Перезаписывает суффикс резервной копии своим собственным суффиксом при копировании с помощью —backup. cp —backup=simple -suffix=own_suffix text.txt /home/user/destinationfolder/
-u Копирует файл, только если файл назначения старше оригинала. cp -u text.txt /home/user/destinationfolder/text.txt
—update Копирует файл, только если файл назначения старше оригинала. cp —update text.txt /home/user/destinationfolder/text.txt
-v Выводит сообщение после завершения операции копирования. cp -v text.txt text1.txt
—verbose Выводит сообщение после операции копирования. cp —verbose text.txt text1.txt
Совет

Вы также можете комбинировать многие из этих параметров. Для этого в поле команды напишите параметры и отделите их пробелом.

Примеры применения CP на практике

Из большого количества опций, доступных для команды copy, видно, что CP в Linux можно использовать не только для простого копирования файлов и папок. Комбинируя различные параметры, вы можете управлять крупномасштабными задачами. Следующие три примера соответствуют типичным сценариям использования в повседневной жизни пользователя Linux.

Нумерованное резервное копирование

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

cp -f -v --backup=numbered text.txt text.txt

Мы создадим эту резервную копию под тем же именем файла, а также в той же папке. Чтобы это стало возможным, используем опцию «принудительно». Поскольку мы дополнительно активировали опцию «нумерованный», новые файлы с пронумерованными именами файлов все равно будут в каждом случае. Благодаря опции «verbose» вы получаете уведомление после каждой операции копирования.

В консоли это выглядит следующим образом:

~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~1~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~2~'
~$ cp -v -f --backup=numbered text.txt text.txt
'text.txt' -> 'text.txt.~3~'
~$ ls
text.txt  text.txt.~1~  text.txt.~2~  text.txt.~3~
Совет

В Linux вы можете использовать команду «ls» для отображения списка файлов и подпапок, существующих в папке.

Сортировка файлов с помощью подстановочных знаков

У вас есть папка, набитая файлами: картинки, документы и приложения хранятся в беспорядке. Предположим, что вы хотите скопировать все изображения в одну папку. Вместо того чтобы вводить в команду все изображения по отдельности, мы используем звездочку (*), которая действует как подстановочный знак. В нашем примере мы заменяем полное имя файла звездочкой и указываем только расширения файлов.

cp *.jpg *.png /home/user/pictures

Эта команда копирует все файлы с расширениями JPG и PNG в папку images. Все остальные форматы файлов игнорируются. Оригинальные файлы остаются, поскольку вы копируете только данные с CP, а не перемещаете их.

Копирование каталогов

Рекурсивное копирование включает папку вместе с ее вложенными папками. Таким образом, в этом случае переносится структура каталогов. Это не работает при простом копировании с помощью CP: если вы попытаетесь скопировать папку без ее каталогов, вы получите только сообщение об ошибке. Вместо этого нужно установить параметр «-r» или «-recursive» или «-R».

В нашем примере мы хотим регулярно делать резервную копию папки, включая ее содержимое и вложенные папки. Чтобы не копировать все каждый раз, мы дополнительно используем функцию «update».

cp -r -u /home/user/Original/ /home/user/Backups/

При первом запуске команды внутри папки резервного копирования создается каталог «Original». В него копируются все файлы и подкаталоги. При больших объемах данных это может занять некоторое время. При использовании опции «-u» вы всегда будете копировать только измененные данные.

Альтернативы Linux CP

Несмотря на многочисленные возможности CP, команда может быть использована только в относительно ограниченных пределах. Например, если вы хотите создать копию, а затем удалить оригинал, вам придется прибегнуть к команде MV (move). В этой команде вы также вводите исходный объект и путь назначения.

Немного более сложной, чем CP, является команда DD. С ее помощью вы имеете дополнительную возможность изменить формат данных в процессе копирования. Для этого процесс происходит бит за битом. Команда подходит, например, для копирования жестких дисков или разделов целиком.

Интересна также команда Linux PYCP. С ее помощью вы получаете графическое отображение хода процесса копирования. Однако для этого вам потребуется Python 3.5 (или более новая версия). В новых версиях Ubuntu этот язык программирования предустановлен по умолчанию.

Команда Linux SCP также может быть полезной. С помощью Secure Copy вы можете передавать данные с одного локального компьютера на другой или наоборот. Это делается через SSH и поэтому является зашифрованной операцией.

Резюме

С помощью Linux CP вы можете быстро и относительно легко копировать файлы и папки. Имея под рукой множество опций, можно выполнять и более сложные задачи. Для выполнения обычных задач вы также можете легко поместить команду в сценарии оболочки. Таким образом, вы можете написать себе сценарий, например, для еженедельного резервного копирования.

Для ежедневного использования терминала Linux полезно ознакомиться с некоторыми другими командами. Например, узнайте больше об этих командах, чтобы упростить рабочий процесс:

  • Команда Linux SED: Простой текстовый редактор.
  • Команда Linux Tail: Отображает последние строки файла.
  • Команда Linux head: Отображает первые строки файла.
  • Команда Linux CAT: Отображает содержимое файла.

Оцените статью
cdelat.ru
Добавить комментарий