cp — копирование файлов и каталогов
cp — копирование файлов и каталогов
ОБЗОР
cp [опции] файл путь
cp [опции] файл... каталог
Опции POSIX: [-fiprR] [—]
Дополнительные опции POSIX 1003.1-2003: [-HLP]
Опции GNU file-utils 4.0 (краткая форма):
[-abdfilprsuvxPR] [-S СУФФИКС] [-V {numbered,existing,simple}] [—backup=CONTROL] [—sparse=КОГДА] [—help] [—version] [—]
Дополнительные опции GNU file-utils 4.1 (краткая форма):
[-HLP] [—copy-contents] [—no-preserve] [—reply=HOW] [—remove-destination] [—strip-trailing-slashes] [—target-directory=DIR]
ОПИСАНИЕ
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. Однако, глупое поведение, которое проявляет версия cp в GNU 4.0 не запрещается.)
--
Завершает список опций.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ POSIX 2003
Стандарт POSIX 1003.1-2003 добавляет три опции, которые определяют как управлять символьными ссылками. Когда выполняется нерекурсивное копирование, символьные ссылки разименовываются (берутся те объекты на которые они указывают, вместо самой ссылки — прим.пер.). Когда выполняется рекурсивное копирование с использованием опции -r, результаты зависят от реализации. Когда выполняется рекурсивное копирование с использованием опции -R:
-H
Разименовывает символьные ссылки, указанные в списке параметров. Не разименовывает символьные ссылки, которые встречаются во время рекурсивного копирования, а просто копирует их.
-L
Разименовывает все символьные ссылки, как заданные в списке параметров так и встретившиеся во время рекурсивного копирования.
-P
Не разименовывает никакие символьные ссылки, ни заданные в списке параметров, ни встретившиеся во время рекурсивного копирования. Просто копирует их как символьные ссылки.
Нет опции, работающей по умолчанию — необходимо указывать одну из опций для достижения нужного результата.
ПОДРОБНОСТИ ВЕРСИИ GNU
Обычно файлы записываются точно в том же виде, как и были прочитаны. См. ниже об опции —sparse, который является исключением.
По умолчанию cp не копирует каталоги (см. опцию -r ).
cp обычно отвергает копирование файла в себя же, за следующим исключением: если заданы опции —force —backup и при этом исходный файл и файл, в который осуществляется копирование, идентичны и являются обычными файлами, то cp сделает резервную копию файла: обычную или нумерованную, как скажете. Это полезно, когда вы просто хотите сделать резервную копию существующего файла, перед тем как его изменить.
По умолчанию, символьные ссылки не разименовываются.
ОПЦИИ GNU
-a, --archive
По возможности сохраняет структуру и атрибуты исходных файлов при копировании (но не сохраняет структуру каталогов). Эквивалентно заданию опций -dpPR.
-b
Смотрите обсуждение резервных копий ниже.
--copy-contents
(начиная с версии file-utils 4.1)В file-utils 4.0 делаются глупые вещи, попытки копировать содержимое файлов устройств и FIFO во время рекурсивного копирования. Никогда не используйте эту опцию. С ней, `cp’ может просто зависнуть, читая FIFO или /dev/tty или заполнить весь диск копируя /dev/zero.
-d
Копирует символьные ссылки как символьные ссылки, а не файлы, на которые они указывают, и сохраняет жесткие ссылки между исходными файлами в копиях.В file-utils 4.0 длинная опция —no-dereference была синонимом для опции -d, но в file-utils 4.1 она является синонимом для опции -P, в то время как опция -d эквивалентна опциям —no-dereference —preserve=links.
-f, --force
Удаляет существующие файлы в случае возникновения ошибки при открытии их на чтение и никогда не спрашивает подтверждения перед тем как это сделать. (Такое поведение начинается с версии file-utils 4.1. В file-utils 4.0 эта опция была эквивалентна новой опции —remove-destination.)
-H
(начиная с версии file-utils 4.1) См. описание POSIX выше.
-i, --interactive
Спрашивает, нужно ли перезаписывать существующие обычные файлы.
-l, --link
Делает жесткие ссылки вместо копирования обычных файлов (не каталогов).
-L, --dereference
(начиная с версии file-utils 4.1)Смотрите описание POSIX выше.
--no-preserve=АТРИБУТЫ
(начиная с версии file-utils 4.1) Не сохраняет заданные атрибуты. См. ниже опцию —preserve.
cp --parents a/b/c existing_dir
копирует файл a/b/c в existing_dir/a/b/c, создавая отсутствующие промежуточные каталоги.
- Параметр КОГДА может принимать следующие значения:
- auto
- Поведение по умолчанию: выходной файл является разреженным, если входной файл также является разреженным.
- always
- Всегда делать выходной файл разреженным. Это полезно, когда входной файл расположен на файловой системе, которая не поддерживает разреженные файлы, а выходной файл будет располагаться на файловой системе, которая их поддерживает.
- never
- Никогда не делать выходные файлы разреженными. Если вы нашли применение для этой опции, дайте нам знать.
ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ GNU
GNU-версии таких программ как cp, mv, ln, install и patch могут, если потребуется, делать резервные копии файлов, которые будут перезаписаны, изменены или уничтожены. При желании, резервные копии файлов создаются с помощью опции -b. Как они будут называться, задает опция -V. В случае, если имя файла резервной копии создается с помощью добавления суффикса к имени исходного файла, то суффикс указывается с помощью опции -S.
- -b, —backup
- Делать резервные копии файлов, которые будут перезаписаны или удалены.
- —backup=CONTROL
- (Начиная с версии fileutils-4.1.)
- -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
- Всегда делать простые резервные копии.
- Определяет, как будут называться резервные копии файлов. Аргумент МЕТОД может принимать значения numbered (или t), existing (или nil) и never (или simple). Если данная опция не задана, то будет использовано значение переменной окружения VERSION_CONTROL. Если же не задано значение и этой переменной, то по умолчанию тип резервного копирования устанавливается в existing.Данная опция соответствует переменной version-control в Emacs. Допустимыми значениями МЕТОД являются (допускаются однозначные сокращения):
СТАНДАРТНЫЕ ОПЦИИ GNU
- —help
- Выдать подсказку на стандартный вывод и успешно завершиться.
- —version
- Выдать информацию о версии на стандартный вывод и успешно завершиться.
- —
- Служит для обозначения конца списка опций.
ОКРУЖЕНИЕ
При работе обычным образом используются значения переменных LANG, LC_ALL, LC_COLLATE, LC_CTYPE и LC_MESSAGES. Для GNU версии используются также переменные SIMPLE_BACKUP_SUFFIX и VERSION_CONTROL, контролирующие создание резервных копий, как описано выше.
СОВМЕСТИМОСТЬ
POSIX 1003.2
ЗАМЕЧАНИЯ
Данная страница описывает версию cp пакета fileutils-4.1; другие версии могут иметь небольшие отличия. Исправления и дополнения присылайте по адресу aeb@cwi.nl. Сообщения об ошибках в этой программе присылайте по адресу fileutils-bugs@gnu.ai.mit.edu.
ПЕРЕВОД
Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2003