TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #193 7.51K
Прокачиваемся в cp

У вас хоть одна пользовательская сессия проходит без копирования файлов?) В общем-то для этого мы и используем команду cp, в которой немало полезных опций.

Начнем с простого. Для копирования файлов команда имеет 2 типа синтаксиса:

1) с сохранением названия - с указанием каталога;


$ cp ./src/file ./dest/


2) без сохранения - с указанием нового имени файла;


$ cp ./src/file ./dest/file_backup


Сразу же скину ссылку на полную информацию о команде. Далее мы рассмотрим основные кейсы.

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

Для копирования каталогов нужно использовать опцию "-r":


$ cp -r source destination
$ ls destination
source


Тут ме переносим весь каталог вместе с его наполнением.

Если нет полной уверенности в том, что каталог "dest" существует, можно добавить флаг "-t" для вывода предупреждения:


$ cp -rt src dest3
cp: cannot stat 'dest3': No such file or directory


Копирование в этом случае выполнено не будет и каталог не будет создан.

Копирование содержимого каталога

Для того, чтобы перенести только содержимое директории, а не ее саму, используем:


$ cp -r src no_dest
$ ls no_dest
file1 file2 file3


Но есть нюансик... Это так работает только, если no_dest ранее не существовал. Если каталог назначения существует, то в нем будет создан src.

Для того чтобы избежать такого поведения можно использовать опцию "-T":


$ cp -rT src yes_dest
ls yes_dest
file1 file2 file3


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


$ cp src/* dest


Однако в этом случае скрытые файлы скопированы не будут. Ну и это не проблема особо:


$ cp src/* src/.* dest


Обработка существующих файлов

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


$ cp -i src/* dest
cp: overwrite 'dest/file1'? y
cp: overwrite 'dest/file2'? y


С помощью опции "-n" можно отключить перезапись существующих ресурсов:


$ cp -n file1 dest


Создание бэкапов

Для существующих файлов можно cделать резервную копию с помощью опции "-b". Если использовать этот флаг, то в конце названия файла резервной копии будет добавлен символ тильды "~":


$ cp -b file1 dest
$ ls dest
file1~


При использовании параметра "--backup" можно настроить имя резервной копии. Вот доступные варианты:

1) none - резервная копия не делается;

2) numbered - к имени файла будет добавляться номер;

3) simple - в конец файла будет добавлен знак "~";

4) existing - если в целевой директории уже есть бэкапы, то будет использоваться аналогичный им тип нейминга;

Чтобы использовать номер в имени бэкапа используйте:


$ cp --backup=numbered file1 dest
$ ls dest
file1.~1~


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

Для этого нужно использовать опцию "-u":


$ cp -u file1 dest


Копирование ссылок

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


$ cp test_link links
$ ls -l links
-rw-rw-r-- 1 ... test_link


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


$ cp test_link links
$ ls -l links
lrwxrwxrwx 1 ... test2_link -> test2


Ток, пожалуйста, не забывайте проверять путь к оригиналу на корректность - в примере выше ссылка поломана.

Для жестких ссылок существует другой подход. Если вы хотите, чтобы она осталась собой после копирования, нужно использовать опцию "-l":


$ cp -l hlink hlink1
$ ls -l
-rw-rw-r-- 3 ... file
-rw-rw-r-- 3 ... hlink
-rw-rw-r-- 3 ... hlink1


Сохранение атрибутов

По умолчанию cp обновляет временные метки и атрибуты прав доступа файлов при копировании.

Иногда может возникнуть необходимость их сохранить. Для этого используем "--preserve":


$ cp --preserve=all file dest


LinuxCamp | #utils
  • 👍 40
  • 🔥 18
  • ❤ 6
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →