Основы операционной системы UNIX

       

Копирование файлов


Команда cp копирует исходный файл в целевой файл или каталог. Она имеет следующий синтаксис:

cp [-p] исходный целевой

cp [-r] [-p] исходный... каталог

Исходный файл не должен совпадать с целевым. Если целевой файл является каталогом, то исходные файлы копируются в него под теми же именами. Только в этом случае можно указывать несколько исходных файлов. Если целевой файл существует и не является каталогом, его старое содержимое теряется. Права доступа, владелец и группа целевого файла при этом не меняются.

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

Команда cp поддерживает следующие основные опции:

сохраняет информацию о владельце, по возможности - права доступа и времена доступа для нового файла;

-r

копирует рекурсивно, включая подкаталоги.

Два дефиса (--) позволяют явно указать конец опций командной строки, что дает возможность команде cp работать с именами файлов, начинающимися с дефиса (-). Если в одной командной строке указаны -- и -, второй дефис будет интерпретироваться как имя файла.

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

[kravchuk@arturo 16:53:35 /tmp]$ mkdir d1 [kravchuk@arturo 16:53:37 /tmp]$ rm f* [kravchuk@arturo 16:54:08 /tmp]$ ls >f1.txt [kravchuk@arturo 16:54:24 /tmp]$ ln f1.txt f2.txt [kravchuk@arturo 16:54:39 /tmp]$ ln -s f1.txt f3.txt [kravchuk@arturo 16:54:45 /tmp]$ cp f1.txt f2.txt f3.txt d1 [kravchuk@arturo 16:54:58 /tmp]$ ls -l d1 total 24 -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f2.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:54 f3.txt

Вот пример обычного копирования файлов "один в один":

[kravchuk@arturo 16:55:22 /tmp]$ cp f1.txt f5.txt [kravchuk@arturo 16:55:29 /tmp]$ ls -l f*.txt -rw-r--r-- 2 kravchuk 50 639 Мар 26 16:54 f1.txt -rw-r--r-- 2 kravchuk 50 639 Мар 26 16:54 f2.txt lrwxrwxrwx 1 kravchuk 50 6 Мар 26 16:54 f3.txt -> f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:55 f5.txt

Рекурсивное копирование:

[kravchuk@arturo 16:55:34 /tmp]$ cp -r d1 d2 [kravchuk@arturo 16:56:47 /tmp]$ ls -l d2 total 24 -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f1.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f2.txt -rw-r--r-- 1 kravchuk 50 639 Мар 26 16:56 f3.txt

Копирование файлов, имена которых начинаются с дефиса:

[kravchuk@arturo 16:56:50 /tmp]$ ls > -1 [kravchuk@arturo 16:58:44 /tmp]$ cp -1 1.txt cp: illegal option -- 1 cp: Insufficient arguments (1) Usage: cp [-f] [-i] [-p] f1 f2 cp [-f] [-i] [-p] f1 ... fn d1 cp -r|R [-f] [-i] [-p] d1 ... dn-1 dn [kravchuk@arturo 16:58:48 /tmp]$ cp -- -1 1.txt [kravchuk@arturo 16:58:53 /tmp]$ ls -l ?.txt -rw-r--r-- 1 kravchuk 50 666 Мар 26 16:58 1.txt



Содержание раздела