Заметки о решаемых задачах АйТишников

Сделал - запиши. Нашёл - сохрани :)

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

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

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

 

 

 

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

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

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

cp /источник/путь/файл /цель/путь/файл

Пример:

Допустим у нас следующая структура папок

 

home
user
dir1 file01
dir2

 

Если мы хотим скопировать file01 из текущего местоположения в /home/user/dir1 в /home/user/dir2, то мы должны выполнить следующую команду в командной строке:

cp /home/user/dir1/file01 /home/user/dir2/file01

Можно укоротить команду заменив /home/user на ~ (тильда)

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

cp ~/dir1/file01 ~/dir2/file01

Можно также опустить имя файла при копировании если мы его не собираемся переименовывать:

cp ~/dir1/file01 ~/dir2

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

cp ~/dir1/file01

То есть достаточно указать откуда, а куда - это папка в которой мы находимся сейчас.

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

cp file01 ~/dir2

Делаем резервную копию файла перед его копированием в Linux

Выше мы рассмотрели пример в котором не было копируемого файла в директории приёмнике.

А что если в dir2 есть файл с таким же именем - file01 и мы выполняем команду копирования?

cp file01 ~/dir2

Эта команда перезапишет файл file01 в целевой директории dir2. Не будет предупреждений, подсказок, сообщения об ошибке, просто перезапишется файл, т.к. команда действительная и без синтаксических ошибок.у.

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

cp -b file01 ~/dir2

Ну, или же с полными путями

cp -b /home/user/dir1/file01 /home/user/dir2/file01

После выполнения этой команды в целевой папке будет скопированный файл file01 и файл с тильдой в конце file01~, который является резервной копией.

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

cp --backup=numbered /home/user/dir1/file01 /home/user/dir2/file01

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

Копирование файла с запросом перезаписи, в Linux

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

cp -i /home/user/dir1/file01 /home/user/dir2/file01

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

Для перезаписи файла жмём Y, для отмены - N или CTRL+C.

 

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

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

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

home
user
dir1 file01
dir2 file01(символическая ссылка на dir1/file01)
dir3 No Items

Что делает эта команда:

cp /home/user/dir1/file01 /home/user/dir3/file01

Она просто копирует файл (именно файл) из одной папки в другую.

А что произойдёт если скопировать символическую ссылку из dir2dir2, как мы помним, лежит файл с символической ссылкой) в dir3?

cp /home/user/dir2/file01 /home/user/dir3/file01

Мы скопируем в dir3 не ссылку, а сам файл!
На самом деле будет скопирован файл на который указывает символическая ссылка. Это как будто мы копируем file01 из dir1.

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

cp -H /home/user/dir2/file01 /home/user/dir3/file01

Используя ключ -H мы указываем команде cp следовать по символической ссылке к источнику (файлу).

Можно использовать ещё один ключ -L, который указывает на то, что всегда копировать файл, а не символическую ссылку:

cp -L /home/user/dir2/file01 /home/user/dir3/file01

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

cp -d /home/user/dir2/file01 /home/user/dir3/file01

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

cp -P /home/user/dir2/file01 /home/user/dir3/file01

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

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

Символическая ссылка - это ярлык указывающий на файл. Ярлык не содержит сам файл, в нём только адрес который указывает на файл.

Жесткая ссылка, это ещё одно имя файла. Жёсткая ссылка может находиться там же, где и файл (только должно быть другое имя) или в другой директории. Это, по сути, сам файл, но без копирования его. То есть мы можем иметь множество жёстких ссылок на один файл, которые находятся в разных местах, но без физического копирования содержимого файла.
По сути, имя файла, когда он у нас появился в системе и есть первая жёсткая ссылка.
И ещё один момент.
Файл не удалится пока не будет удалена последняя жёсткая ссылка на него, даже если сначала удалим его первое имя, то есть удалим в том месте куда он попал впервые.

Мы отвлеклись от команды cp. Возвращаемся к ней.

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

Пример команды:

cp -l /источник/файл /цель/файл

Например у нас есть текстовый файл с Войной и миром, Льва Толстого - voina_i_mir.txt и нам надо, чтобы мы его могли найти в системе как война_и_мир.txt

Можно его просто скопировать и переименовать, но тогда мы займём в два раза больше места.
Создав символическую ссылку мы не обезопасим себя от удаления файла-источника.

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

Пример команды:

cp -l /home/user/voina_i_mir.txt /home/user/война_и_мир.txt

Создаём символическую ссылку с помощью команды ср

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

cp -s /источник/файл /цель/файл

Это как альтернатива, но лучше использовать команду ln -s, она предпочтительнее cp.

Копируем файл, если он новее файла-назначения

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

cp -u /источник/файл /цель/файл

Если в папке назначения нет такого файла, то будет просто операция копирования.

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

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

cp /источник/файл1 /источник/файл2 /источник/файл3 /цель

Приведенная выше команда скопирует файл1, файл2 и файл3 в папку цель.

Можно использовать шаблоны для массового копирования файлов.

cp /home/user/video1/*.mpv /home/user/video2

Приведенная выше команда будет копировать все файлы с расширением .mp4 в папку video2.

Копирование папок командой cp

Папки копируются так же, как копируются файлы.

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

home
user
dir1 file01file02
dir2

И мы хотим переместить папку dir1 в папку dir2 следующим образом:

home
user
dir2
dir1 file01file02

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

cp -r /home/user/dir1 /home/user/dir2

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

cp -R /home/user/dir1 /home/user/dir2

Эти команды копируют содержимое dir1 в папку dir2, а также всё, что находится внутри папки dir1 (и папки, и файлы). Это рекурсивное копирование.

Резюме

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

 

07 июня 2022, 11:43    Александр Linux 0    398 0

 

 

 

 



Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.