CP(1)

ИМЯ
cp - копирование файлов и каталогов

ОБЗОР
cp [опции] файл путь
cp [опции] файл... каталог

Ключи POSIX: [-fipRr] [--]

Ключи GNU (краткая форма): [-abdfilprsuvxPR] [-S СУФФИКС] [-V {numbered,existing,simple}] [--sparse=КОГДА] [--help] [--version] [--]

ОПИСАНИЕ
cp копирует файлы (или, если попросить, каталоги). Вы можете либо копировать один файл в другой, заданный файл, либо копировать сколько угодно файлов в заданный каталог.

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

(Так, если /a~-- это каталог, то cp -r /a /b скопирует /a в /b/a и /a/x в /b/a/x в случае, если /b уже существует, но эта же команда будет копировать /a в /b и /a/x to /b/x, если /b не существует, или же завершится с ошибкой, если /b -- обычный файл).

Права доступа к файлам и каталогам будут равны тем, что были на оригинальных файлах, логически умноженными (AND) на 0777 (другими словами, в новых правах будут сброшены биты sticky, setuid и setgid -- Прим. ред.), а также с учетом umask(1) пользователя (за исключением случая, когда задана опция -p). (Но во время рекурсивного копирования каталогов, вновь создаваемые каталоги будут временно получать права, логически сложенные (OR) со значением S_IRWXU (0700), для того, чтобы разрешить чтение, запись и поиск во вновь созданных каталогах).

При попытке скопировать файл сам в себя ничего происходить не будет (за исключением возможной выдачи сообщения об ошибке). Когда происходит копирование файла в другой существующий файл, то он открывается с использованием вызова open(path, O_WRONLY | O_TRUNC). Когда копирование осуществляется во вновь создаваемый файл, то он создается с использованием вызова open(path, O_WRONLY | O_CREAT, mode). Если эти вызовы завершаются неудачно, то считается, что файл существует, а чтобы cp попытался его удалить (unlink), необходимо указать опцию -f. Если удаление проходит успешно, то дальше все работает как для случая с новым файлом.

КЛЮЧИ POSIX
POSIX имеет четыре с половиной ключа:

-f  Если требуется, удаляет существующие файлы, в которые происходит копирование. (См. выше)

-i  Спрашивает, нужно ли перезаписывать существующие файлы, в которые происходит копирование. (Запрос выдается на стандартный вывод ошибок, а ответ читается со стандартного ввода. Копирование осуществляется только в случае положительного ответа).

-p  Сохраняет исходные параметры файла, такие как владелец, группа, права доступа (включая suid и sgid биты), время последней модификации и время последнего доступа к файлу. В случае, если установка владельца или группы приводит к ошибке, suid и sgid биты сбрасываются. (Заметим, что впоследствии исходный файл и его копия могут иметь разное время последнего доступа, так как операция копирования является доступом к исходному файлу).

-R  Копировать каталоги рекурсивно; правильно обрабатывать ситуации, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, копией FIFO или специального файла будет также являться FIFO или специальный файл).

-r  Копировать каталоги рекурсивно; выполнять какие-то, неопределенные стандартом действия, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, разрешается, и фактически одобряется, наличие опции -r как синонима для -R. Однако, глупое поведение, которое проявляет текущая версия GNU cp (см. ниже) не запрещается).

--  Завершает список ключей.

ПОДРОБНОСТИ ВЕРСИИ GNU

Обычно файлы записываются точно в том же виде, как и были прочитаны. См. ниже о ключе --sparse, который является исключением.

По умолчанию cp не копирует каталоги (см. ключ -r ).

cp обычно отвергает копирование файла в себя же, за следующим исключением: если заданы ключи --force --backup и при этом исходный файл и файл, в который осуществляется копирование, идентичны и являются обычными файлами, то cp сделает резервную копию файла: обычную или нумерованную, как скажете. Это полезно, когда вы просто хотите сделать резервную копию существующего файла, перед тем как его изменить.

ОПЦИИ GNU

-a, --archive
    По возможности сохраняет структуру и атрибуты исходных файлов при копировании (но не сохраняет структуру каталогов). Эквивалентно заданию опций -dpR.

-d, --no-dereference
    Копирует символьные ссылки как символьные ссылки, а не файлы, на которые они указывают, и сохраняет жесткие ссылки между исходными файлами в копиях.

-f, --force
    Удаляет существующие файлы, в которые происходит копирование и не задает вопросов перед тем, как это сделать.

-i, --interactive
    Спрашивает, нужно ли перезаписывать существующие обычные файлы.

-l, --link
    Делает жесткие ссылки вместо копирования обычных файлов (не каталогов).

-p, --preserve
    Защищает оригинальные параметры файла, такие как владелец, группа, права доступа и временные штампы.

-P, --parents
    Формирует имя каждого копируемого файла путем добавления к имени каталога, в который осуществляется копирование, символа косой черты (/) и указанного полного имени исходного файла. Последний заданный аргумент cp должен быть именем существующего каталога. Например, команда
        cp --parents a/b/c existing_dir
    копирует файл a/b/c в existing_dir/a/b/c, создавая отсутствующие промежуточные каталоги.

-r  Копировать каталоги рекурсивно, копировать любые не-каталоги и не символьные ссылки (то есть FIFO и специальные файлы), как если бы они были обычными файлами. Это приводит к попытке прочитать данные из каждого исходного файла и записать их в файл, в который осуществляется копирование. Так, с этой опцией cp может запросто "повиснуть", читая FIFO или /dev/tty. (Это ошибка. Она значит, что вы должны отказаться от -r и использовать -R, если вы не знаете, какие файлы могут встретится в дереве каталогов, которое вы копируете. Открытие файла неизвестного устройства, такого как сканер, может вызвать непредсказуемые эффекты со стороны вашего аппаратного обеспечения).

-R, --recursive
    Копировать каталоги рекурсивно, сохраняя специальные файлы (см. -r выше).

--sparse=КОГДА
    Разреженный (sparse) файл содержит дыры -- последовательности нулевых байт, которые не занимают физических блоков на диске; системный вызов read читает их как нули. Такой подход может как сохранить дисковое пространство, так и увеличить скорость работы, потому что многие бинарные файлы содержат много расположенных последовательно нулевых байт. По умолчанию, cp определяет дыры в исходном файле с помощью простой эвристики и делает соответствующий выходной файл также разреженным.

    Параметр КОГДА может принимать следующие значения:

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

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

    never
        Никогда не делать выходные файлы разреженными. Если вы нашли применение для этой опции, дайте нам знать.

-s, --symbolic-link
    Делает символьные ссылки вместо копирования не-каталогов. Все имена исходных файлов должны быть полными, т. е. начинаться с символа /, за исключением случая, когда символьные ссылки будут создаваться в текущем каталоге. Эта опция генерирует сообщение об ошибке, если система не поддерживает символьные ссылки.

-u, --update
    Не копировать не-каталоги, которые уже существуют в том месте, куда осуществляется копирование, если они имеют такое же или более раннее время модификации.

-v, --verbose
    Выводить имя каждого файла перед его копированием.

-x, --one-file-system
    Пропускать подкаталоги, которые расположены на файловых системах, отличных от той, где начиналось копирование.

ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ GNU
GNU-версии таких программ как cp, mv, ln, install и patch могут, если потребуется, делать резервные копии файлов, которые будут перезаписаны, изменены или уничтожены. При желании, резервные копии файлов создаются с помощью опции -b. Как они будут называться, задает опция -V. В случае, если имя файла резервной копии создается с помощью добавления суффикса к имени исходного файла, то суффикс указывается с помощью опции -S.

-b, --backup
    Делать резервные копии файлов, которые будут перезаписаны или удалены.

-S СУФФИКС, --suffix=СУФФИКС
    Добавить СУФФИКС к имени файла при создании его резервной копии. Если данная опция не задана, то суффикс можно также задать, используя переменную окружения SIMPLE_BACKUP_SUFFIX Если не задана ни опция, ни переменная, то по умолчанию используется суффикс ~.

-V МЕТОД, --version-control=МЕТОД
    Определяет, как будут называться резервные копии файлов. Аргумент МЕТОД может принимать значения numbered (или t), existing (или nil) и never (или simple). Если данная опция не задана, то будет использовано значение переменной окружения VERSION_CONTROL. Если же не задано значение и этой переменной, то по умолчанию тип резервного копирования устанавливается в existing.

    Данная опция соответствует переменной version-control в Emacs. Допустимыми значениями МЕТОД являются (допускаются однозначные сокращения):

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

    nil, existing
        Делать нумерованные резервные копии файлов для файлов, которые уже их имеют и простые резервные копии для остальных файлов.

    never, simple
        Всегда делать простые резервные копии.

СТАНДАРТНЫЕ ОПЦИИ GNU

--help
    Выдать подсказку на стандартный вывод и успешно завершиться.

--version
    Выдать информацию о версии на стандартный вывод и успешно завершиться.

--  Служит для обозначения конца списка опций.

ОКРУЖЕНИЕ
При работе обычным образом используются значения переменных LANG, LC_ALL, LC_COLLATE, LC_CTYPE и LC_MESSAGES. Для GNU версии используются также переменные SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL, контролирующие создание резервных копий, как описано выше.

СОВМЕСТИМОСТЬ
POSIX 1003.2

ЗАМЕЧАНИЯ
Данная страница описывает версию cp пакета fileutils-4.0; другие версии могут иметь небольшие отличия. Исправления и дополнения присылайте по адресу aeb@cwi.nl. Сообщения об ошибках в этой программе присылайте по адресу fileutils-bugs@gnu.ai.mit.edu.