cp
Копирование файлов (POSIX)
Синтаксис:
cp [-f|-i]
[-Rrp] [Расширения QNX Neutrino]
исходный_файл
конечный_файл
cp [-f|-i]
[-Rrp] [Расширения QNX Neutrino]
исходный_файл...
результ_каталог
Поддерживаемые
платформы:
QNX Neutrino, Linux, Microsoft
Windows
Опции:
-A
(Расширение QNX Neutrino.)
Сохранить время доступа к исходному файлу.
-B
(Расширение QNX Neutrino.)
Использовать очень небольшой буфер для копирования (2 Кб)
-c
(Расширение QNX Neutrino.) Создать каталоги,
необходимые для открытия целевого пути. Например, если каталог
/home/eric не существует и
указывается путь:
cp -c file /home/eric/source/file
утилита cp выполняет эквивалент следующего:
mkdir -p
/home/eric/source
cp file
/home/eric/source/file
-D
(Расширение QNX Neutrino.) При использовании опции -R спускаться в каталог
устройств и нижележащие каталоги. Это поведение утилиты по
умолчанию; для предотвращения перехода в каталог устройств и
нижележащие каталоги при использовании опции cp -R выберите опцию -N.
-f
(Расширение QNX Neutrino.) Принудительно удалить
ссылку на целевой файл перед копированием. Эта опция
предотвращает появление интерактивных приглашений (если не
выбрана опция -i), но не деактивирует
диагностические сообщения.
-i
Выполнить в интерактивном режиме; всегда выдавать
приглашение на подтверждение наличия целевого пути, вне
зависимости от полномочий на изменение целевого файла. Опция -i позволяет избежать
случайного затирания информации в файлах при копировании. При
отсутствии полномочий на запись в выходной файл и
положительном ответе на запрос сначала удаляется ссылка на
целевой файл. В противном случае выходной файл
перезаписывается и усекается.
Поведение
утилиты при выборе комбинации опций -i и -f аналогично ее поведению при
выборе только опции -i, за исключением
того, что если в ответе на запрос выбрано значение yes, то сначала в любом случае удаляется
ссылка на целевой файл, даже при наличии полномочий на его
изменение. При выборе только опции -i ссылка на целевой файл
удаляется только при отсутствии полномочий на его изменение.
-l n
("эль" – расширение QNX Neutrino.) Если исходный_файл является
каталогом и указана опция -R или -r, то копировать только n уровней дерева
каталогов. При выборе -l 0 опция -R или -r недействительны; копируются
только файлы на текущем уровне, имена которых перечислены
непосредственно в командной строке.
-L
(Расширение QNX Neutrino.) Выполнить попытку
сохранения жестких ссылок. При обнаружении утилитой cp файла с количеством ссылок более 1 она
запоминает идентификатор устройства и серийный номер файла
(индексный дескриптор). Если в процессе выполнения утилиты cp обнаружен еще один файл с количеством
ссылок более 1, серийный номер и идентификатор устройства
которого совпадают с предыдущим, утилита cp вместо создания второй копии файла
создает ссылку. При изменении целевого носителя созданные
ссылки стираются из памяти утилиты cp. (Это важно при резервном копировании
на гибкие или съемные жесткие диски.)
-M qnx|unix
(Расширение
QNX Neutrino.) Создавать рекурсивные копии в режиме UNIX (по
умолчанию) или в прежнем режиме QNX.
Ранее в QNX
выполнялось копирование содержимого каталогов,
перечисленных в командной строке, в результирующий каталог. В
UNIX в результирующий каталог копируется непосредственно сам
каталог (как при выборе mv). В любом
случае, если копируется только один каталог, а в качестве
целевого указан несуществующий каталог, с помощью утилиты cp создается целевой каталог, в который
копируется содержимое исходного
каталога.
Примечание. Режим по
умолчанию в QNX Neutrino отличается от аналогичного режима в QNX
4.
Для
получения дополнительной информации см. раздел "Рекурсивное
копирование" далее.
-N
(Расширение QNX Neutrino.) Не спускаться в каталог
устройств и нижележащие каталоги при использовании опции -R. По умолчанию cp -R спускается в каталог устройств и
нижележащие каталоги при пересечении с деревом каталогов;
выбор опции -N позволяет этого
избежать. Пример:
cp -R / /hd/backup
В результате утилита cp резервирует содержимое диска, включая
содержимое каталога /dev.
Примечание. В этом примере в каталог /hd/backup/dev выполняется только резервное
копирование данных дисковых устройств (блок- ориентированных
специальных файлов), поскольку утилита cp не переносит байт-ориентированные
специальные файлы в рекурсивные копии.
После
добавления опции -N пример выглядит
следующим образом:
cp -RN / /hd/backup
В результате выполняется резервное копирование
содержимого диска, однако каталог /dev не копируется, поскольку он
отсутствует на дисковом устройстве.
-n
(Расширение
QNX Neutrino.) Копировать только в том случае, если исходный
файл создан после выходного (т.е. исходный файл был изменен
позже) или выходной файл не существует.
-p
После копирования предпринять попытку дублирования
времени изменения и файлового режима для каждого входного
файла в соответствующем выходном файле. Кроме того,
дублировать принадлежность каждого файла, если в процессе
задействованы полномочия суперпользователя (root). Если соответствующие полномочия для
процесса отсутствуют, дублирование завершается неуспешно.
-r
Выполнить рекурсивное копирование каталогов. Если
исходным файлом является специальный файл (например,
специальный файл FIFO), утилита cp не создает выходной специальный файл.
Для получения дополнительной информации см. в раздел о
рекурсивном копировании и описания опций -M и -R.
-R
Если исходный_файл является
каталогом, выполнить рекурсивное копирование каталога со всеми
файлами и подкаталогами с целью сохранения специальных файлов.
В QNX Neutrino создание блок-ориентированных специальных
файлов и байт-ориентированных специальных файлов таким
способом невозможно. Для получения дополнительной информации
см. разделе о рекурсивном копировании и описания опций -M и -r.
-s
(Расширение
QNX Neutrino.) Выполнить в безопасном режиме; копировать только
при наличии полномочий на изменение существующего целевого
файла. Если полномочия на изменение файла отсутствуют, файл
пропускается без вывода приглашений.
-t
(Расширение QNX Neutrino.) Не предпринимать попытку
дублирования файловых времени и режима, если указана опция - p или переменная среды POSIX_STRICT установлена.
-V
(Расширение QNX Neutrino.) Вывести максимально
расширенную информацию. В дополнение ко всей информации,
выводимой в случае установки опции -v, при выборе этой опции также
выводится индикатор выполнения (% завершенных операций) и
строки с информацией о пропущенных утилитой cp файлах и каталогах (т.е. пользователь
может видеть как обработанные утилитой cp файлы, так и необработанные).
Например, при выборе опций -R и -n значение cp -VRn более эффективно, чем cp -vRn, поскольку в этом случае выбор
опции -v может привести
к тому, что выполнение утилиты cp завершится, и будет вновь выведено
приглашение без представления каких-либо результатов.
-v
(Расширение
QNX Neutrino.) Вывести расширенную информацию. Отобразить строку
комментария каждый раз при копировании файла или создании
каталога.
-X
(Расширение QNX Neutrino.)
Копировать только при отсутствии целевого файла.
-x
(Расширение QNX Neutrino.)
Копировать только при наличии целевого файла.
исходный_файл
Путь к
копируемому файлу. При необходимости присвоения каталогу имени исходный_файл также требуется
выбрать опцию -R.
конечный_файл
Путь для копирования
единственного файла.
результ_каталог
Путь к существующему каталогу, который
должен содержать выходной файл (выходные файлы).
Описание:
Для утилиты cp существуют две формы синтаксиса:
cp [-f|-i] [-Rrp] [Расширения
QNX Neutrino] исходный_файл конечный_файл
Утилита cp копирует
содержимое исходного файла в целевой файл с именем конечный_файл. Первая форма
синтаксиса применяется, когда целевой файл не является
существующим каталогом, и существует только один исходный
файл.
cp [-f|-i] [-Rrp] [Расширения
QNX Neutrino] исходный_файл... результ_каталог
Для каждого значения исходный_файл утилита cp копирует содержимое файла в целевой
файл в существующем каталоге с именем результ_каталог. Имя выходного
файла в результирующем каталоге совпадает с базовым именем
(конечный компонент пути), если этот файл не является
каталогом (см. "Рекурсивное копирование"). Пример.
cp dir/dir/myfile
/existingdir
копирует содержимое dir/dir/myfile в файл /existingdir/myfile.
Вторая форма применяется,
когда целевой файл является существующим каталогом или при
определении нескольких исходных файлов.
Общая информация
Если опция -R (рекурсивное копирование) не
выбрана, то утилита cp не копирует исходный_файл, являющийся
каталогом.
Примечание. Для дублирования списков
файлов используется утилита POSIX pax -rw. С помощью функции find можно выбирать наборы файлов по
сложным критериям, а затем перенаправлять их в pax.
Поведение
утилиты cp в случае, если
целевой файл уже существует, зависит от используемых опций.
Если опция -f или -i не выбрана, то утилита cp выдает приглашение только при
отсутствии полномочий на изменение существующего целевого
файла. При этом сначала выводится запрос о необходимости
удаления ссылки на файл. Если ответ на запрос отрицательный,
то утилита cp продолжает
обработку всех остальных файлов. Запрос выводится только в том
случае, если стандартным потоком ввода stdin является
терминал ввода вывода. В противном случае утилита cp выводит в стандартный поток ошибок stderr диагностическое
сообщение и пропускает файл.
При
копировании файлов на съемный носитель, например гибкий или
съемный диск, и переполнении этого носителя утилита cp закрывает и удаляет не полностью
скопированный целевой файл, выводит соответствующее сообщение,
а затем завершается.
Рекурсивное копирование
При
рекурсивном копировании каталога целевым местоположением
должен быть каталог. При копировании нескольких элементов
соответствующий каталог должен уже существовать. При
копировании одного каталога утилита cp создает целевой каталог (все
промежуточные каталоги должны уже существовать, если не
выбрана опция -c).
Для cp доступны два режима рекурсивного
копирования:
-
В историческом режиме QNX
4, определяемом опцией -Mqnx, утилита cp копирует файлы и каталоги из
исходного каталога в целевой. Сам исходный каталог в
целевом каталоге не дублируется.
-
При выборе режима по
умолчанию (-Munix) утилита cp дублирует исходный каталог в
целевом (если не выполняется копирование только одного
каталога и целевой каталог уже существует – в этом случае
режимы - Munix и -Mqnx ничем не
отличаются).
Примечание.
Режим по умолчанию в QNX Neutrino отличается от аналогичного
режима в QNX 4
Например, в
режиме по умолчанию -Munix при выборе
значения cp -r /bin /mydir/bin каталог /bin дублируется в каталог /mydir/bin, т.е. целевым
местоположением является каталог /mydir/bin/bin, а файл /bin/sh копируется в каталог /mydir/bin/bin/sh. Поведение
утилиты в данном случае аналогично обработке целевых
местоположений утилитой mv.
В режиме -Mqnx при выборе значения cp -Mqnx -r /bin /mydir/bin содержимое
каталога /bin копируется в
каталог /mydir/bin (например, файл
/bin/sh копируется в /mydir/bin/sh).
Примеры:
Копирование
файлов файл1, файл2 и файл3 из текущего рабочего каталога в
каталог /home/eric:
cp файл1 файл2 файл3
/home/eric
Резервное копирование всего содержимого каталога home на гибкие диски (если /f0 является точкой монтирования для /dev/fd0), в режиме рекурсивного
копирования UNIX по умолчанию:
cp -rvp /home /f0
Та же операция в режиме
рекурсивного копирования QNX:
cp -Mqnx -rvp /home
/f0/home
Рекурсивное
копирование каталога /home/eric в каталог /home/ejohnson, если /home/ejohnson еще не создан (режим -Munix или -Mqnx):
cp -rv /home/eric
/home/ejohnson
Та же операция
в режиме -Mqnx, если каталог ejohnson уже существует:
cp -Mqnx -rv /home/eric
/home/ejohnson
Та же операция
в режиме -Munix, если каталог ejohnson уже существует:
cp -Munix -rv
/home/eric/. /home/ejohnson
Рекурсивное
копирование содержимого текущего каталога в каталог /mydir/ в режиме -Mqnx или -Munix:
cp -Rpv . /mydir/
Та же операция
в режиме -Munix:
cp -Munix -Rpv * /mydir/
Примечание. В предыдущем примере при
использовании режима -Mqnx вместо -Munix содержимое каталогов,
перечисленных в командной строке, копируется в каталог /mydir/ (т.е. файл ./bin/ls копируется в каталог /mydir/ls, а каталог ./usr/bin соответствует каталогу /mydir/bin в целевом местоположении).
Рекурсивное
копирование каталога /home/eric в каталог /backups/eric:
cp -rv /home/eric
/backups
Та же операция в режиме
рекурсивного копирования QNX:
cp -Mqnx -rv /home/eric
/backups/eric
Файлы:
Входные файлы
Если опция -r не выбрана и указан только
один исходный файл, этот исходный файл может быть любого типа.
Если опция -r указана или имеется
несколько исходных файлов, входные файлы, определяемые каждым
операндом исходный_файл, в т.ч. файлы,
содержащиеся в перечисленных каталогах, должны быть
стандартными, блок-ориентированными специальными файлами или
каталогами.
В случае
использования опции -R файлы FIFO
дублируются в структуру целевого каталога, но содержимое
исходных FIFO не копируется. При обнаружении утилитой cp в исходных файлах блок-ориентированных
или байт-ориентированных специальных файлов возникает ошибка,
поскольку утилита cp не может
создавать их в целевом местоположении.
Выходные файлы
Каждый новый выходной файл
относится к одному из следующих типов файлов:
-
каталог, содержащий копии файлов и
подкаталогов (если они существуют), обнаруженных во входном
каталоге;
-
стандартный файл с таким же содержимым,
как и в соответствующем входном файле.
-
FIFO, созданный в
результате выбора опции -R и
определения FIFO в качестве соответствующего входного
файла. Данные исходного FIFO не копируются
в новый FIFO (т.е. новый FIFO остается пустым).
-
Поскольку соответствующий
входной файл представлял собой символьную ссылку и выбрана
опция -R, создается
символьная ссылка. Новая символьная ссылка привязана к
тому же пути, что и исходная символьная ссылка.
Если в существующем целевом каталоге определены
другие типы файлов, утилита cp открывает этот
каталог для записи и предпринимает попытку копирования в него
содержимого соответствующего входного файла.
Переменные среды:
POSIX_STRICT
От этой переменной зависит,
копируется ли время изменения файла. При ее определении опции
расширения QNX Neutrino деактивируются.
Определение
переменной среды POSIX_STRICT влияет на опции
-p и - t следующим образом:
POSIX_STRICT
|
Опция
|
Действие
|
Установлена
|
Ни
-p, ни -t
|
Если целевое
местоположение не существует, дублируется только
режим.
|
Установлена
|
-p
|
Дублируется
время и режим; если утилита запущена пользователем root, то также
дублируются идентификаторы пользователя и группы.
|
Установлена
|
-pt
|
Если утилита запущена пользователем root, то дублируются
идентификаторы пользователя и группы.
|
Установлена
|
-t
|
Если целевое
местоположение не существует, дублируется только
режим.
|
Не установлена
|
Ни
-p, ни -t
|
Дублируются
время и режим.
|
Не установлена
|
-p
|
Дублируется
время и режим; если утилита запущена пользователем root, то также
дублируются идентификаторы пользователя и группы.
|
Не установлена
|
-pt
|
Если
утилита запущена пользователем root, то дублируются
идентификаторы пользователя и группы.
|
Не установлена
|
-t
|
Если целевое
местоположение не существует, дублируется только
режим.
|
0
Все входные файлы скопированы
успешно.
>0
Возникла
ошибка.
Предупреждения:
Если утилита
cp выполняет
копирование нескольких файлов или рекурсивное копирование, но
опция - R не выбрана, то cp не копирует файл FIFO и
байт-ориентированные специальные файлы.
Если опция -R указана и предпринятая
утилитой cp попытка
копирования определенного файла в указанной иерархии файлов
завершается неуспешно, то выполняется обработка остальных
файлов в этой иерархии.