Перейти к содержимому

Как скопировать символическую ссылку linux

  • автор:

Символические ссылки в Linux

В операционной системе Linux есть такой замечательный и широко используемый инструмент, как символические ссылки. Поговорим, как их создавать в XFCE (Thunar), KDE (Dolphin), через терминал.

Что такое символическая ссылка (или симлинк)?

Допустим, у вас есть директории («папки»):
/home/user/Dir1
/home/user/Dir2

Но вы хотите, чтобы папка /home/user/Dir2 открывалась по адресу /home/user/Dir1/Dir2, но при этом продолжала работать по своему основному адресу /home/user/Dir2. Таким образом, файл с адресом /home/user/Dir2/file.txt будет доступен и по нему, и по адресу /home/user/Dir1/Dir2/file.txt ! аналогично для остальных вложенных файлов и директорий.

На практике это может пригодиться много где. Допустим, клиенты Яндекс.Диска, Облака Mail.Ru, Baidu Pan (bypy) умеют выполнять синхронизацию с учетом символических ссылок. Например, Яндекс.Диск настроен на синхронизацию папки ~/Yandex.Disk (~ — это Домашняя папка) с непосредственно Яндекс.Диском. Но вы хотите, чтобы «облачное» хранилище синхронизировало («всасывало») в себя директорию, которая находится абсолютно в другом месте, чем та, которую оно синхронизирует по умолчанию. Достаточно создать внутри директории, которую синхронизирует ваше «облако» символическую ссылку на директорию, которую нужно «всосать». Например,

ln -s "~/Yandex.Disk/Думалогия" "/media/oblako/ГОТОВОЕ/Думалогия"

то есть создать символическую ссылку «Думалогия» внутри «Домашняя папка/Yandex.Disk». Тогда по адресу ~/Yandex.Disk/Думалогия будет доступно содержимое папки /media/oblako/ГОТОВОЕ/Думалогия. Таким образом, Яндекс.Диск (или другое облачное хранилище, умеющее работать с симлинками, «всосет» в себя содержимое папки /media/oblako/ГОТОВОЕ/Думалогия.

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

Снимок экрана 2016-05-22 12-01-06.png

1. Открыть файловый менеджер, дойти до папки, на которую будем создавать символическую ссылку.
2. Выделить директорию (папку) или файл, на которую будем создавать симлинк.
3. В меню «Правка» выбрать «Создать ссылку».
4. Создастся объект «ссылка на…», который будет в списке файлов и директорий.
Можно переименовать. 5. Вырезаем его: нажимаем на него правой мышью и выбираем «Вырезать» или нажимаем Ctrl+X.
6. Вставляем в нужное место.
7. Открываем его в месте, куда мы его вставили, и наблюдаем за адресной строкой файлового менеджера. Проверяем, что все работает. как и написано выше.

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

Снимок экрана 2016-05-22 12-10-15.png

1. Открыть файловый менеджер.
2. Открыть папку, в которой будем создавать символическую ссылку на другую папку.
3. Правой кнопкой мыши нажимаем в свободное место, выбираем «Создать» ——> «Символическая ссылка». В открывшемся окошке указываем или выбираем с помощью кнопки открытия файлового диалога адрес, на который будем ссылаться.
4. Проверяем работоспособность.

Создание символической ссылки через терминал

ln -s "путь1" "путь2"

путь1 — что ссылаем, путь2 — куда ссылаем.
Если в графическом файловом менеджере скопировать файл или директорию. то при вставке в текстовое поле вставится полный путь внутри вашей файловой системы к скопированному объекту.

То есть открываете блокнот (текстовый редактор любой), вставляете туда скопированные пути в эту команду, которую заранее копируете и вставляете, затем получившуюся команду копируете в терминал.
Михаил Н. (обсуждение) 13:17, 22 мая 2016 (MSK)

Как копировать ссылку и файл?

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

Jaberwock ★★★
08.10.10 11:17:56 MSD

cp -L /tmp/symlink /foo/file cp -P /tmp/symlink /foo/symlink

edigaryev ★★★★★
( 08.10.10 11:34:21 MSD )
Led ★★★☆☆
( 08.10.10 11:40:07 MSD )
Ответ на: комментарий от edigaryev 08.10.10 11:34:21 MSD

Забыл сказать я знаю только имя ссылки.

Jaberwock ★★★
( 08.10.10 12:30:51 MSD ) автор топика
Ответ на: комментарий от edigaryev 08.10.10 11:34:21 MSD

Как узнать на какой файл ссылается символическая ссылка?

Jaberwock ★★★
( 08.10.10 12:33:04 MSD ) автор топика
Ответ на: комментарий от Jaberwock 08.10.10 12:33:04 MSD
Eddy_Em ☆☆☆☆☆
( 08.10.10 12:38:03 MSD )
Ответ на: комментарий от Eddy_Em 08.10.10 12:38:03 MSD

Так, или можно проще?

echo `echo $i|grep -o «\/.*\/»«ls -l $i |grep -o «[^ ]*$»`

Jaberwock ★★★
( 08.10.10 13:07:11 MSD ) автор топика
Ответ на: комментарий от Jaberwock 08.10.10 12:33:04 MSD

>Как узнать на какой файл ссылается символическая ссылка?

edigaryev ★★★★★
( 08.10.10 13:25:45 MSD )
Ответ на: комментарий от Jaberwock 08.10.10 12:30:51 MSD

>Забыл сказать я знаю только имя ссылки.

В моем примере имя самого файла знать не нужно.

Символьные ссылки и команда ln

Никак не могу врубиться в понятие символьной ссылки. Ну вот, допустим, я создаю файлы file1.txt с содержанием This is the first file и файл file2.txt с содержанием this is the second file . Далее ввожу команду ln file1.txt file2.txt и на меня ругается Linux, говорит, что не получилось создать жесткую ссылку. Что мне надо добавить в первый файл, чтобы он ссылался на второй ? В интернете почти все примеры с ln -s . Зачем нужен аргумент -s ? Был бы очень благодерн, если кто-нибудь объяснил бы на примере.

Отслеживать
задан 18 июн 2016 в 8:16
7,748 17 17 золотых знаков 72 72 серебряных знака 133 133 бронзовых знака
ассоциация: stackoverflow.com/questions/1951742
14 мар 2017 в 19:13

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Пожалуй внесу и свою лепту, так как буквально позавчера разбирался что к чему крепится и конспектировал всё .

Простой исчерпывающий пример — лучшее объяснение: как говорится, лучше один раз пощупать, чем сто раз посмотреть.

Для начала создадим где-нибудь какую-нибудь папку для экспериментов (у меня, например, такая есть всегда — Tests , в домашнем каталоге):

mkdir Tests 
cd Tests 

Теперь создадим в ней файл source.txt с текстом 1 :

echo 1 > source.txt 

По умолчанию (при вызове без параметров) команда ln создаёт «жёсткую ссылку» («hard link»):

ln source.txt hard-link.txt 

Жёсткая ссылка — хм . что за фигня.

A hard link is a link file created with the Linux or Unix ln command that points to a file’s inode.

Источник: computerhope.com.

Жёсткая ссылка — это файл, созданный с помощью команды Linux (или Unix) ln , который указывает на «inode» исходного файла.

OK. что такое «inode» файла.

Short for index node, an inode is information contained within a Unix system that contains details about each file, such as the node, owner, file, location of file, etc.

Источник: computerhope.com.

Сокращение от «index node»; inode — это информация внутри Unix-систем (внутри операционной системы), которая содержит детальное описание каждого файла; это описание включает в себя информацию о «node» файла, информацию о владельце файла, некоторую информацию о самом файле, информацию о месте расположения файла, и прочее.

OK. что такое «node» файла.

A node or node address is a name or number that identifies a specific computer or terminal in a group of interconnected computers on a network.

Источник: computerhope.com.

Node или node address — это имя или номер, который идентифицирует конкретный компьютер или терминал в группе взаимосвязанных по сети компьютеров.

То есть это некий идентификатор файла в системе .

Фу-у-у, вроде с теорией более-менее разобрались .

Итак, у нас на данный момент в папке Tests имеется файл source.txt с текстом 1 и жёсткая ссылка на него hard-link.txt .

Изменения как в source.txt , так и в hard-link.txt синхронизируются — ничего удивительного.

Если мы перенесём (удалим из текущей директории) любой из файлов в рамках нашей точки монтирования, то на втором файле это никак не скажется и синхронизация будет работать (имеется в виду если мы переносили файл конечно). Опять же — ничего удивительного: файл продолжает существовать пока на него указывает хоть одна ссылка (жёсткая).

Так в чём собственно прикол? Прикол в том, что как уже упоминалось выше, жёсткая ссылка ссылается на индекс файла (inode). Поэтому, например, если мы удалим любой из файлов, а затем создадим файл в этом же месте файл с таким же именем (и расширением), то кажется, что он должен быть синхронизирован с другим файлом, но не тут то было — связь потеряна: так как новый файл — новый индекс (то же самое и при копировании файла — создаётся новый файл с новым индексом и связь теряется).

Перейдём к символическим ссылкам .

При вызове ln с параметром -s или —symbolic будет создана символическая ссылка:

ln -s source.txt soft-link.txt 

Alternatively referred to as a soft link or symlink, a symbolic link is a file that links to another file or directory using its path. Unlike a hard link, a symbolic link can link to any file or directory on any computer. If you are more familiar with Microsoft Windows you can think of a symbolic link as a shortcut in Linux. In Linux and Unix symbolic links are created with the ln command. In the Windows command line you can use the mklink command to create symbolic link from the command line.

Источник: computerhope.com.

Альтернативное название soft link (мягкая/гибкая ссылка) или symlink (симлинк); символическая ссылка — это файл, который связывается с другим файлом или директорией используя путь (адрес места расположения) последнего. В отличие от жёсткой ссылки, символическая ссылка может ссылаться на любой файл или директорию, находящуюся на любом компьютере. Если вы хорошо знакомы с Microsoft Windows, то вы можете думать о символических ссылках как о ярлыках в Linux. В Linux и Unix символические ссылки создаются с помощью команды ln . В командной строке Windows вы можете использовать команду mklink для создания символической ссылки через командную строку.

Иными словами символическая ссылка ссылается на адрес файла, а не индекс файла.

Если мы перенесём (удалим из текущей директории) символическую ссылку soft-link.txt , то это никак не отразится на исходном файле source.txt , однако при попытке открыть ссылку будет показываться сообщение о том, что связь нарушена и предлагаться удалить эту битую ссылку. А вот если мы перенесём (удалим из текущей директории) исходный файл source.txt , то файл soft-link.txt (наша символическая ссылка) станет пустым; однако, если мы создадим новый файл с таким же именем как и исходный файл ( source.txt ) в этой же директории, то синхронизация восстановится и будет работать.

Отслеживать
ответ дан 18 июн 2016 в 11:04
Roman Grinyov Roman Grinyov
3,867 4 4 золотых знака 22 22 серебряных знака 58 58 бронзовых знаков
Спасибо чувак.
– user208916
25 ноя 2017 в 18:37

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

Удалите файл file2.txt — и команда ln file1.txt file2.txt заработает.

Параметр -s говорит делать символьную ссылку вместо жесткой.

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

Основная функциональная разница между ними — в поведении при удалении и замене.

Допустим, у нас есть файл file1.txt и две ссылки на него: жесткая file2.txt и символьная file3.txt .

Во всех трех файлах при открытии виден один и тот же текст. При изменении этого текста все три файла меняются синхронно.

Удалим файл file1.txt . Теперь у нас в файле file2.txt остался текст, который был в файле file1.txt на момент удаления (это же один и тот же файл, просто теперь у него на 1 имя меньше). А вот файл file3.txt больше не открывается — это сломанная (broken) ссылка.

Создадим новый файл file1.txt . Файл file2.txt не изменился — это теперь совсем другой файл. А вот файл file3.txt «починился» у него снова такое же содержимое, что и в file1.txt .

Теперь расскажу почему символьные ссылки применяют намного чаще жестких.

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

Во-вторых, поведение при удалении. Есть все больше программ, которые вместо перезаписи файла удаляют либо переименовывают старый, после чего создают новый файл на старом месте. Так поступает новый Microsoft Office, так поступает Creation Kit для Скайрима — и это только то с чем я сталкивался недавно. СУБД SQLite может удалить файл журнала базы после зафиксированной транзакции. Поэтому символьная ссылка становится в некотором роде «надежнее», чем жесткая ссылка.

Отслеживать
ответ дан 18 июн 2016 в 8:37
Pavel Mayorov Pavel Mayorov
58.3k 7 7 золотых знаков 72 72 серебряных знака 146 146 бронзовых знаков

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

18 июн 2016 в 8:43
@VladD это которое save as?
18 июн 2016 в 8:43
@NickVolynkin нет, это так через обычный Save автоматом делается.
18 июн 2016 в 8:44

@NickVolynkin: Не, я имел в виду именно Save. Если я удалю данные из файла, начну писать новые, и произойдёт сбой, то будут потеряны все данные. Если сохраню данные в новый файл и потом переименую, при сбое останутся либо старые, либо новые данные. Такие себе транзакции-для-бедных.

18 июн 2016 в 8:46

Автор вопроса хочет чтобы file1.txt указывал на file2.txt, то есть в обратном порядке аргументы следует в ln передавать. Жёсткие ссылки на директории существуют и вы ими постоянно пользуетесь ( .. ссылается на родительскую директорию). Верно, что создание обычными пользователями жёстких ссылок на директории как правило запрещено. Учитывая сюрпризы работы с жёсткими ссылками, лучше рекомендовать создание символических ссылок ( ln -s ) и для обычных файлов.

18 июн 2016 в 18:04

Ссылка предназначена для создания дополнительной точки выхода в один и тот же файл. Пусть в директории first у вас находится файл file1.txt. Вам нужно создать точно такой же файл в директории second, тогда вы можете не копируя файл создать на него ссылку

ln first/file1.txt second/file1.txt 

В результате, если вы поменяете содержимое файла в second/file1.txt, он изменится в first/file1.txt. На уровне файловой системы это один и тот же файл, только у него две точки входа. При удалении файла, операционная система следит за счетчиком ссылок, когда он становится равным 0, файл считается полностью удаленным.

Параметр -s позволяет создавать символическую ссылку

ln -s first/file1.txt second/file1.txt 

second/file1.txt станет специальным типом файла: ссылкой. Вы можете удалить файл first/file1.txt и тогда ссылка будет вести на несуществующий файл. Кроме того, в отчете команды ls -la , вы будете видеть, что это ссылка на существующий файл, в случае жесткой ссылки (первый вариант) вы не сможете отличить одну точку входа от другой — обе они будут представлять один и тот же файл.

Отслеживать
ответ дан 18 июн 2016 в 8:31
19.4k 29 29 золотых знаков 47 47 серебряных знаков 139 139 бронзовых знаков
@faoxis дополнил ответ
18 июн 2016 в 8:36

файл может продолжать существовать и без явного имени (процесс, который открыл файл, может продолжать с ним работать, используя file descriptor даже если соответствующее имя уже было удалено или его не было вообще: O_TMPFILE ).

18 июн 2016 в 18:18

ln file1.txt file2.txt пытается создать жёсткую ссылку (hardlink) между именем file2.txt и cодержимым файла file1.txt .
ln -s создаёт символьную ссылку (symlink) от file2.txt имени к file1.txt имени. Это разные вещи.

В обоих случаях, имя которое вы хотите использовать для ссылки/файла должно быть свободно—директория не должна содержать соответствующую запись (для команды ln file1.txt file2.txt , file2.txt не должен существовать).

Что мне надо добавить в первый файл, чтобы он ссылался на второй ?

Удалить первый файл и вызвать ln -s чтобы создать символьную ссылку на второй:

$ rm file1.txt $ ln -s file2.txt file1.txt 

В этом случае: cat file1.txt вернёт this is the second file .

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

ln "исходный файл" "новая ссылка на него" 

(ссылка — это последний аргумент).

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

Жёсткая ссылка — это просто связь между именем файла в директории и его содержимым на диске (inode, etc). Если файл не удалён, то он имеет по крайней мере одну жёсткую ссылку ( rm file и unlink file выполняют одну и ту же операцию: удалить ссылку file , если файл имел больше одной жёсткой ссылки, то он продолжает быть доступен под соответствующими другими именами).

Создать «жёсткую ссылку» означает добавить ещё одно имя для файла. Новое имя настолько же реально как и все остальные имена файлов—нет более настоящего имени файла чем другие. Чтобы создать новую жёсткую ссылку для файла, соответствующее имя файла должно быть свободно. В вашем случае file2.txt уже является жёсткой ссылкой на файл с содержимым this is the second file . Если вы хотите чтобы file2.txt был ссылкой на file1.txt или его содержимое, то следует удалить существующую ссылку: unlink file2.txt (или rm file2.txt ) прежде чем создавать новую.

Символьная ссылка — это связь между одним именем файла и другим именем файла (существующим или нет). Это специальный файл, который можно создать, например, ln -s командой, чьё содержимое интерпретируется как имя другого файла. Утилиты, ориентированные на работу с содержимым файлов, обычно автоматически следуют по ссылкам, например, cat some-symlink выведет содержимое файла, на которое some-symlink указывает. С другой стороны утилиты, которые работают с именами файлов, имеют эффект на саму символьную ссылку, например rm some-symlink или unlink some-symlink удаляют some-symlink , не трогая файл, на который она ссылается. Иногда можно выбирать, например, stat -L заставляет stat следовать по ссылкам, в противном случае stat показывает информацию о самом symlink.

В большинстве случаев вы вероятно хотите создать именно symlink, оставляя hardlink для специализированных инструментов, таких как Time Machine на macOS (из-за относительной простоты symlink (меньше сюрпризов) и ограничений на hardlink).

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

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

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

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

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

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

dir1 file01

Если мы хотим скопировать 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. Символическая ссылка содержит только адрес к файлу.

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

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

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

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

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

А что произойдёт если скопировать символическую ссылку из dir2 (в dir2 , как мы помним, лежит файл с символической ссылкой) в 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

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

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

dir1 file01 file02

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

dir1 file01 file02

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

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

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

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

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

Резюме

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *