Это руководство покажет вам, как копировать файлы и каталоги в вашей системе с помощью командной строки Linux.
Команда cp используется для копирования файлов.
Синтаксис для копирования файла с одного места на другое выглядит следующим образом:
cp /source/path/name /target/path/name
Например представьте, что вы имеете следующую структуру папок:
Если вы хотите скопировать 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
В предыдущем разделе 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~ и т.д.
Если вы не хотите делать резервные копии файлов, лежащих в вашей файловой системе, но вы также хотите, убедиться, что команда копия не перезаписывает файл без разбора вы можете получить приглашение, чтобы показать вопросом, не хотите ли вы перезаписать.
Для этого используйте следующий синтаксис:
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 одновременно.
Символическая ссылка немного походит на ярлык на рабочем столе. Содержимое символической ссылки является адрес физического файла.
Представьте себе, вы имеете следующую структуру папок:
Посмотрите на следующую команду:
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
Стоит отметить, что если файл не существует на целевой стороне, то копия будет иметь место.
Вы можете предоставить более одного исходного файла внутри команды копирования следующим образом:
cp /source/file_one /source/file_two /source/file_three /target
Приведенная выше команда будет копировать file_one, file_two и file_three в целевую папку.
Если файлы соответствуют определенному шаблону, то вы можете также использовать групповые символы следующим образом:
cp /home/andreyex/music/*.mp3 /home/andreyex/music2
Приведенная выше команда будет копировать все файлы с расширением .mp3 в папку music2.
Копирование папок такое же, как копирование файлов.
Например представьте, что вы имеете следующую структуру папок:
Представьте, что вы хотите переместить папку folder_one в папку folder_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, а также любые суб-каталоги и файлы в пределах подкаталогов.
Это руководство дало вам инструменты требующиеся для копирования файлов в Linux. Для всего остального вы можете использовать команду Linux man.
man cp
Благодарность за хорошую статью
Совсем не затронули тему копирования файлов с внешних носителей – именно в этом случае есть пара тонких моментов, которые совсем не очевидны в man cp.