В Linux команда cp
(copy) используется для копирования файлов из одного места в другое. Утилита может также копировать каталоги.
Исходный файл/каталог копируется в файл/каталог, заданный в параметре Целевой файл/каталог. Если целевой файл/каталог существует, то его содержимое заменяется без предупреждения.
Содержание
Синтаксис
cp [ПАРАМЕТР]… ИСТОЧНИК НАЗНАЧЕНИЕ
Опции
- -a, --archive
- То же, что и
-dPR --preserve=all
- --backup[=КОГДА]
- Создавать резервную копию каждого целевого файла
- -b
- То же, что и
--backup
, но без аргумента - -d
- То же, что и
--no-dereference --preserve=link
- -f, --force
- Если невозможно открыть существующий файл, то удалить его и попробовать ещё раз (этот параметр игнорируется, если также указан параметр
-n
) - -i, --interactive
- Спрашивать перед тем как переписывать (отменяет ранее указанный параметр
-n
) - -L, --dereference
- Всегда следовать символьным ссылкам в ИСТОЧНИКЕ
- -n, --no-clobber
- Не перезаписывать существующий файл (отменяет ранее указанный ключ
-i
) - -p
- То же, что и --preserve=mode
,
ownership,
timestamps - --preserve[=СПИС_АТТР]
- Сохранять указанные атрибуты (по умолчанию:
mode
,ownership
,timestamps
) и, если возможно, дополнительные атрибуты:context
,links
,xattr
,all
- --no-preserve=СПИС_АТТР
- Не сохранять указанные атрибуты
- --parents
- Добавить исходный путь к КАТАЛОГУ
- -R, -r, --recursive
- Рекурсивно копировать каталоги
- -S, --suffix=СУФФИКС
- Использовать для запасных копий заданный СУФФИКС
- --target-directory=КАТ
- Скопировать все ИСТОЧНИКИ в КАТАЛОГ
- -u, --update
- Копировать только тогда когда исходный файл новее чем файл назначения, или когда файл назначения отсутствует
- -v, --verbose
- Пояснять что будет сделано
Примеры использования в Linux команды cp
В домашнем каталоге мною были создвны каталоги Directory_Source
и Directory_Target
. В первый из них я поместил файлы readme
и .vimrc
.
Копирование файла
В пустой каталог назначения копируем файл readme
:
oleg@mobile:~:$ cp Directory_Source/readme Directory_Target
В файл readme
, скопированный в каталог назначения, копируем изменённый файл readme
:
oleg@mobile:~:$ cp Directory_Source/readme Directory_Target/readme
В результате копирования содержимое файла readme
было перезаписано без всякого предупреждения.
Копирование нескольких файлов
oleg@mobile:~:$ cp Directory_Source/readme .vimrc Directory_Target
Файлы были скопированы в каталог назначения:
oleg@mobile:~:$ ls -la Directory_Target
итого 20
drwxr-xr-x 2 oleg users 4096 июл 19 12:28 ./
drwx--x--x 68 oleg 100 12288 июл 19 12:28 ../
-rw-r--r-- 1 oleg users 0 июл 19 12:28 readme
-rw-r--r-- 1 oleg users 3740 июл 19 12:28 .vimrc
Предотвращение перезаписи существующих файлов
Для предотвращения перзаписи существующего файла используется опция -n
:
oleg@mobile:~:$ cp -n Directory_Source/readme Directory_Target
При использовании опции -i
система будет требовать подтвержения перезаписи файла:
o cp -i Directory_Source/readme Directory_Target
cp: переписать 'Directory_Target/readme'?
От вас потребуется ответ y
или n
.
Создание автоматических резервных копий
В каталог назначения копируем изменённый файл readme
:
oleg@mobile:~:$ cp -b Directory_Source/readme Directory_Target
Получаем следующий результат:
oleg@mobile:~:$ ls -la Directory_Target
итого 24
drwxr-xr-x 2 oleg users 4096 июл 19 12:48 ./
drwx--x--x 68 oleg 100 12288 июл 19 12:48 ../
-rw-r--r-- 1 oleg users 145 июл 19 12:48 readme
-rw-r--r-- 1 oleg users 0 июл 19 12:47 readme~
-rw-r--r-- 1 oleg users 3740 июл 19 12:33 .vimrc
Как видим в каталоге сохранена резервная копия файла readme~
.
Копирование каталога
oleg@mobile:~:$ cp -r Directory_Source Directory_Target
oleg@mobile:~:$ ls -la Directory_Target
итого 20
drwxr-xr-x 3 oleg users 4096 июл 19 12:58 ./
drwx--x--x 68 oleg 100 12288 июл 19 12:48 ../
drwxr-xr-x 2 oleg users 4096 июл 19 12:57 Directory_Source/
Теперь у каталога Directory_Target
появился подкаталог Directory_Source
.
Копирование лишь содержимого каталога
Для копирования содержимого исходного каталога в каталог назначения следует к имени исходного каталога добавить /.
:
oleg@mobile:~:$ cp Directory_Source/. Directory_Target
Результат:
oleg@mobile:~:$ ls -la Directory_Target/
итого 24
drwxr-xr-x 2 oleg users 4096 июл 19 13:06 ./
drwx--x--x 68 oleg 100 12288 июл 19 12:48 ../
-rw-r--r-- 1 oleg users 145 июл 19 13:06 readme
-rw-r--r-- 1 oleg users 3740 июл 19 13:06 .vimrc
Копирование нескольких каталогов
Копирование нескольких каталогов или лишь их содержимого выполняется также, как и копирование одного каталога или его содержимого. Надо лишь перечислить все исходные каталоги.
Сохранение атрибутов при копировании
При копировании файлов изменяются права доступа и временные метки. При необходимости их сохранения при копировании используется поция -p
, позволяющая сохранить режим доступа и временную метку.
Заключение
Вы убедились в том, что в Linux команда cp
является очень нужной. Надеюсь на то, что эта статья будет вам полезна. Успехов!