Rate this post

Название утилиты cp — это сокращение от Copy, что означает копировать. Утилита позволяет полностью копировать файлы и директории.

Оглавление

СИНТАКСИС И ОПЦИИ

Общий синтаксис cp выглядит вот так:

$ cp опции файл-источник файл-приемник

Или:

$ cp опции файл-источник директория-приемник/

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

Утилита имеет несколько интересных опций, которые могут сильно помочь при нестандартных задачах копирования, поэтому давайте их рассмотрим:

  • —attributes-only — не копировать содержимое файла, а только флаги доступа и владельца;
  • -f, —force — перезаписывать существующие файлы;
  • -i, —interactive — спрашивать, нужно ли перезаписывать существующие файлы;
  • -L — копировать несимволические ссылки, а то на что они указывают;
  • -n — не перезаписывать существующие файлы;
  • -P — не следовать символическим ссылкам;
  • -r — копировать папку linux рекурсивно;
  • -s — не выполнять копирование файлов в linux, а создавать символические ссылки;
  • -u — скопировать файл, только если он был изменен;
  • -x — не выходить за пределы этой файловой системы;
  • -p — сохранять владельца, временные метки и флаги доступа при копировании;
  • -t — считать файл-приемник директорией и копировать файл-источник в эту директорию.

Как скопировать файл из одной директории в другую с помощью Linux

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

cp /source/path/name /target/path/name

Например представьте, что вы имеете следующую структуру папок:

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
          • file_two
          • file_three
        • folder_two
          • file4

Если вы хотите скопировать file_one из текущего местоположения в /home/andreyex/documents/folder_one в /home/andreyex/documents/folder_two, то вы должны ввести следующую команду в командной строке:

cp /home/andreyex/documents/folder_one/file_one /home/andreyex/documents/folder_two/file_one

Ярлыки вы можете сделать здесь.

Главная часть может быть заменена на тильду (~), что объясняется в этой статье. Это изменяет команду на:

cp ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Вы можете просто опустить имя файла для цели, если вы собираетесь использовать то же имя файла

cp ~/documents/folder_one/file_one ~/documents/folder_two

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

cp ~/documents/folder_one/file_one

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

cp file_one ~/documents/folder_two

Как сделать резервную копию перед копированием файлов в Linux

В предыдущем разделе folder_one содержит файл с именем file_one и folder_two не делает. Представьте себе, что folder_two имеет файл с именем file_one и вы запустили следующую команду:

cp file_one ~/documents/folder_two

Приведенная выше команда перезапишет file_one, который в настоящее время находится в folder_two. Там нет подсказок, нет предупреждения и сообщения об ошибках, потому что, вы указали действительную команду.

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

cp -b /source/file /target/file

Например:

cp -b ~/documents/folder_one/file_one ~/documents/folder_two/file_one

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

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

cp –backup=numbered ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Имя файла для резервных копий будет меняться: file_one.~1~, file_one.~2~ и т.д.

Как запросить перед перезаписью файлов при копировании в Linux

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

Для этого используйте следующий синтаксис:

cp -i /source/file /target/file

Например:

cp -i ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Сообщение будет выглядеть следующим образом :  cp: overwrite ‘./file1’?

Для перезаписи файла нажмите Y на клавиатуре или для отмены нажмите N или CTRL и C одновременно.

Что происходит при копировании символьных ссылок в Linux

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

Представьте себе, вы имеете следующую структуру папок:

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
        • folder_two
          • file_one (symbolic links points to folder_one/file_one)
        • folder3

Посмотрите на следующую команду:

cp ~/documents/folder_one/file_one ~/documents/folder3/file_one

Здесь не должно быть ничего нового, так как он копирует физический файл из одной папки в другую.

Что происходит, однако, если скопировать символическую ссылку из folder_two в folder3?

cp ~/documents/folder_two/file_one ~/documents/folder3/file_one

Файл, который копируется в folder3 не будет символической ссылкой. Это на самом деле файл, на который указывает символическая ссылка, так на самом деле вы получите тот же результат, как если бы путем копирования file_one из folder_one.

Кстати вы можете получить тот же результат с помощью следующей команды:

cp -H ~/documents/folder_two/file_one ~/documents/folder3/file_one

Просто чтобы быть уверенным, хотя есть еще один переключатель, который абсолютно заставляет копировать файл, а не символическую ссылку:

cp -L ~/documents/folder_two/file_one ~/documents/folder3/file_one

Если вы хотите скопировать символическую ссылку необходимо указать следующую команду:

cp -d ~/documents/folder_two/file_one ~/documents/folder3/file_one

Чтобы символическую ссылку скопировать, а не физический файл с помощью следующей команды:

cp -P ~/documents/folder_two/file_one ~documents/folder3/file_one

Как создавать жесткие ссылки с помощью команды ср

В чем разница между символической ссылкой и жесткой связи?

Символическая ссылка – это ярлык для физического файла. Он не содержит больше, чем адрес на физический файл.

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

Это руководство расскажет вам все, что вам нужно знать о жестких ссылках .

Вы можете создать жесткую ссылку с помощью команды ср.

cp -l ~/source/file ~/target/file

В качестве примера того, почему вы могли бы использовать жесткую ссылку учесть, что у вас есть папка под названием видео и в этой папке видео у вас есть действительно большой видео файл с именем honeymoon_video.mp4. Теперь представьте, что вы также хотите, чтобы видео быть известным как barbados_video.mp4, потому что он также имеет кадры Барбадоса.

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

Вы могли бы вместо того, чтобы создать символическую ссылку с именем barbados_video.mp4, которая указывает на файл honeymoon_video.mp4. Это будет работать хорошо, но если кто-то удалил honeymoon_video.mp4 вы остались бы со ссылкой и ничего другого и связь по-прежнему занимает дисковое пространство.

Единственное отличие состоит в том, что они содержат разное количество индексных дескрипторов. (уникальные идентификаторы). Удаление файла honeymoon_video.mp4 не удаляет файл, но только снижает количество для этого файла на 1. Файл будет удален только если все ссылки на этот файл будут удалены.

Чтобы создать ссылку вы могли бы сделать что-то вроде этого:

cp -l /videos/honeymoon_video.mp4 /videos/barbados_video.mp4

Как создать символические ссылки с помощью команды ср

Если вы хотите создать символическую ссылку вместо жесткой ссылки вы можете использовать следующую команду:

cp -s /source/file /target/file

Опять же я бы лично вообще используют команду ln -s, но вместо этого работает хорошо.

Как скопировать файлы, если они новее

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

cp -u /source/file /target/file

Стоит отметить, что если файл не существует на целевой стороне, то копия будет иметь место.

2. Как скопировать несколько файлов

Если вы хотите скопировать несколько файлов одновременно в новое место, вы можете сделать это следующим образом:

cp file1 file2 file3 fileN target_directory

Эта команда скопирует все указанные файлы в целевой каталог. Если в целевом каталоге есть файл(ы), соответствующий имени исходного файла (ов), он будет перезаписан.

3. Несколько способов обработки перезаписи при копировании файлов.

Вероятно, вы не всегда хотите, чтобы ваши существующие файлы целей были перезаписаны, и это абсолютно логично.

Чтобы предотвратить перезапись существующих файлов, вы можете использовать опцию -n. Таким образом, cp выиграл ‘перезаписать существующие файлы.

cp -n source_file target_directory

Но, возможно, вы хотите перезаписать некоторые файлы. Вы можете использовать интерактивную опцию -i, и она спросит вас, хотите ли вы перезаписать существующие файлы.

cp -i source_file target_directory cp: overwrite ‘target_directory/source_file’?

Вы можете ввести y для перезаписи существующего файла или n, чтобы не переписать его.

Существует также возможность создания автоматических резервных копий. Если вы используете опцию -b с командой cp, она перезапишет существующие файлы, но до этого она создаст резервную копию перезаписанных файлов.

cp -b file.txt target_dir / file.txt ls target_dir file.txt file.txt ~

Резервная копия файла заканчивается на ~.

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

Подвести итоги:

  • -i: Подтвердить перед перезаписью
  • -n: Нет перезаписи
  • -b: Перезапись с резервным копированием
  • -u: Перезаписать, если целевой файл устарел или не существует

Как скопировать папки

Копирование папок такое же, как копирование файлов.

Например представьте, что вы имеете следующую структуру папок:

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
          • file_two
        • folder_two

Представьте, что вы хотите переместить папку folder_one в папку folder_two следующим образом:

  • home
    • andreyex
      • documents
        • folder_two
          • folder_one
            • file_one
            • file_two

Вы можете использовать следующую команду:

cp -r /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

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

cp -R /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

Это копирует содержимое folder_one, а также любые суб-каталоги и файлы в пределах подкаталогов.

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

В Bash для копирования файлов используется команда cp (от “copy”), которой обычно передаются два аргумента:

  1. адрес с именем исходного файла,

  2. новый адрес с именем или просто адрес каталога, куда помещается копия.

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

Рассмотрим примеры.

cp readme readme2

В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.

cp readme Desktop/

В папку Desktop копируется файл readme. Здесь текущим является родительский Desktop’у каталог. Имена копии и файла оригинала будут совпадать, а вот полные адреса – нет.

cp/home/irina/tux.png /mnt/D/pingvin.png

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

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

Чтобы скопировать каталог со всем его содержимым, необходимо использовать ключ -r команды cp:

cp-r ./letters ./oldletters

Перемещение и переименование

В Bash-оболочке Linux для перемещения и переименования используется одна и та же команда – mv (от “move” – перемещать). Переименование можно рассматривать как частный случай перемещения, ведь по-сути изменяется полный адрес файла, что равносильно перемещению, даже если файл остается в том же каталоге.

Также как в случае cp, для mv необходимо указать пару аргументов. Выбор между перемещением и переименованием зависит от того, что это за аргументы. При перемещении файл меняет свой адрес, следовательно, если в первом и втором аргументах указаны разные адреса, то произойдет перемещение. Если адреса одинаковые, а различаются только имена, происходит переименование. Кроме того, перемещение может быть совмещено с переименованием.

В случае перемещения без переименования во втором аргументе указывается только каталог места назначения.

mv document.txt Work

mv document.txt Work/doc23.txt

Здесь в первом случае файл document.txt перемещается в каталог Work. Во-втором случае одновременно происходит перемещение файла и его переименование: файл document.txt перемещается в директорию Work и получает новое имя doc23.txt.

При использовании команды mv для переименования в качестве второго аргумента указывается новое имя:

mv order.txt orderNew.txt

mv Work/list.odt Work/names.odt

Каталоги перемещаются и переименовываются по тому же принципу, что и файлы. Групповое перемещение файлов работает также, как с командой cp.

Создание файлов и каталогов

Новые директории создаются командой mkdir. Например, чтобы создать каталог Work в текущей директории необходимо выполнить следующую команду:

mkdir Work
или
mkdir ./Work

Существует множество способов создания файлов, обычно они создаются какой-либо программой. Если все же возникает необходимость создать пустой файл, сделать это можно с помощью программы touch. В качестве аргумента ей передается имя создаваемого файла. Еще один способ – перенаправление вывода какой-либо команды в файл. Пример:

cal> ./Work/January

Здесь программа cal выводит календарь на текущий месяц, а поскольку стоит знак перенаправления вывода, то вывод команды будет записан в файл January, находящийся в папке Work.

Удаление файлов и каталогов

Для удаления файлов используется команда rm. Например:

rm ghost.png

Командой rmdir можно удалить пустой каталог. Если же каталог не пуст, следует использовать команду rm с ключом -r:

Вопросы

У вас в каталоге есть файлы с разными расширениями. Вам надо группу файлов, имеющих одно и тоже расширение, скопировать в другой каталог. Как это сделать одной командой?

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

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.

6. Как скопировать несколько каталогов

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

Просто используйте его так же, как и для одного каталога.

cp -r source_dir1 source_dir2 source_dir3 target_dir

Это всегда последний аргумент в команде, который принимается как целевой каталог.

Если вы хотите скопировать только содержимое нескольких каталогов одновременно, вы также можете это сделать:

cp -r source_dir1 /. source_dir2 /. source_dir3 /. target_dir

Фактически, вы можете смешивать каталоги, их содержимое и файлы в целом.

cp -r source_dir1 source_dir2 /. source_file target_dirСоветВы можете использовать подробный режим с опцией -v, чтобы посмотреть, какие файлы копируются.

7. Как сохранить атрибуты при копировании

Когда вы копируете файл в новое место, его атрибуты, такие как права доступа к файлам и временные метки файла, изменяются.

Если вы хотите сохранить атрибуты исходного файла, вы можете скопировать файлы с помощью опции -p.

Давайте посмотрим на пример.

ls -l /etc/services -rw-r – r– 1 root root 19183 12 Jan 2018 /etc/services

Если я попытаюсь скопировать этот файл, его атрибуты будут изменены:

ls -l /etc/services -rw-r–r– 1 root root 19183 Jan 12 2018 /etc/services

Но если мы используем параметр p, скопированный файл сохранит режим, право собственности и отметку времени.

cp /etc/services . ls -l services -rwxrwxrwx 1 andreyex andreyex 19183 Nov 27 23:16 services

Как вы можете видеть, вы сохранили режим доступа и временную метку исходного файла с опцией -p.

Но подождите! Разве это не должно было сохранить право собственности на исходные файлы? Но вот владелец (root) исходного файла был изменен на andreyex,

Это связано с тем, что только root имеет разрешение на изменение права собственности на файл, принадлежащий root. Если вы используете опцию -p с файлом, не принадлежащим root, он сохранит право собственности. Или вы можете запустить команду с помощью sudo, это сохранит право собственности на файл, принадлежащий root.

Вы также можете указать атрибуты, которые хотите сохранить. Но тогда вам придется использовать опцию -preserve.

cp –preserve=timestamp /etc/services . ls -l services -rw-r–r– 1 andreyex andreyex 19183 Jan 12 2018 services

Как видно из вышеприведенного вывода, команда сохранила только временную метку исходного файла.

Примеры, показанные здесь, являются наиболее распространенными, которые вы будете использовать в качестве пользователя Linux, сисадмина или разработчика программного обеспечения.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Перекрёстные ссылки книги для Копирование, перемещение, создание и удаление файлов и каталогов

  • Команда ls – просмотр каталога
  • Вверх
  • Жесткие и символьные ссылки

Linux

ПРИМЕРЫ КОПИРОВАНИЯ ФАЙЛОВ В LINUX

Теперь, когда вы знаете основные опции можно рассмотреть примеры.Например, мы хотим скопировать некую картинку из домашней папки в подкаталог pictures:

 cp ~/pic.png ~/pictures/

Или можем явно указать имя новой картинки:

 cp ~/pic.png ~/pictures/wallpaper.png

Копирование папок осуществляется с помощью ключа -r:

 cp  -R ~/папка ~/Документы/

После выполнения этой команды копирования ~/папка будет скопирована в папку ~/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t. Иначе папка ~/документы будет перезаписана.

По умолчанию команда cp linux перезаписывает существующие файлы или папки, но можно заставить утилиту спрашивать нужно ли перезаписывать каждый файл если вы неуверены в правильности составления команды:

 cp -i ~/test ~/Documents/test

Есть и противоположная опция -n, означающая никогда не перезаписывать существующие файлы.

Опция -u позволяет копировать файл, только если уже существующий более старой версии, чем новый:

 cp -u ~/test ~/Documents/test

cp также поддерживает специальные символы замены * и ?. Например, следующая команда скопирует все файлы, начинающиеся на test:

 cp ~/test* ~/Документы/

Если нужно применить более сложные регулярные выражения, придется комбинировать утилиту cp с find или egrep.

В случае если важно сохранить права доступа к файлу и его владельца нужно использовать опцию -p:

 cp -p ~/test* ~/Документы/

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

$ cp test.conf{,.bak}

Будет создан файл с таким же именем и расширением .bak

По умолчанию в cp не отображается прогресс копирования файла, что очень неудобно при работе с большими файлами, но его можно легко посмотреть с помощью утилиты cv.

Скопировать файл в другую директорию

Скопируем файл myfile.txt в директорию mydir:

cp myfile.txt mydir

Скопируем файл myfile1.txt в новый файл myfile2.txt

cp myfile1.txt myfile2.txt

Скопировать несколько файлов

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

cp /etc/config/myfile1.txt /home/pupkin/myfile1.txt /mnt/some/myfile3.txt mydir

Скопировать файл с подтверждением

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

cp -i myfile1.txt myfile2.txt cp: переписать ‘myfile2.txt’? y

Показать информацию о копируемых файлах

При использовании опции -v выводится информация о том, какие файлы и куда копируются.

cp -v myfile1.txt myfile2.txt mydir/ ‘myfile1.txt’ -> ‘mydir/myfile1.txt’ ‘myfile2.txt’ -> ‘mydir/myfile2.txt’

Скопировать директорию

Чтобы скопировать директорию и все ее содержимое нужно использовать опцию -r

cp -r /home/pupkin/mydir /mnt/usbflash

Скопировать только если файлы новее

Скопируем файлы вида myfile*.txt (например, это могут быть файлы myfile1.txtmyfile10.txtmyfile2.txt) в директорию mydir, но если результирующий файл существует, то копирование выполняется только в том случае, если исходный файл новее.

cp -u myfile*.txt mydir

Не перезаписывать существующие файлы

Чтобы существующие файлы не перезаписывались, используется опция -n

cp -n /home/pupkin/mydir /mnt/usbflash

Скопировать только атрибуты

Скопируем только атрибуты файла. Содержимое файла не копируется.

cp –attributes-only myfile1.txt myfile2.txt

Создать резервную копию для результирующих файлов, если они существуют

Скопируем файл myfile1.txt в файл myfile2.txt. Если файл myfile2.txt существует, то будет создана его резервная копия.

cp -b myfile1.txt myfile2.txt

Принудительно перезаписывать существующие файлы назначения

Если файл назначения существует и не может быть открыт и удален, то можно использовать опцию -f, чтобы принудительно перезаписать такой файл:

cp -f myfile1.txt myfile2.txt
[spoiler title=”Источники”]

  • https://www.lcnt.ru/?p=213
  • https://andreyex.ru/linux/komandy-linux-i-komandy-shell/kak-skopirovat-fajly-s-pomoshhyu-komandy-sr-v-linux/
  • https://andreyex.ru/operacionnaya-sistema-linux/komanda-cp-v-linux-7-prakticheskih-primerov/
  • https://younglinux.info/bash/cpmv.php
  • https://pingvinus.ru/note/cmd-cp
[/spoiler]

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here