Копирование файлов и папок в системах Unix. Как запросить перед перезаписью файлов при копировании в Linux

Э то руководство покажет вам, как копировать файлы и каталоги в вашей системе с помощью командной строки Linux.

Команда использующаяся для копирования файлов является ср.

Как скопировать файл из одной директории в другую с помощью Linux

Синтаксис для копирования файла с одного места на другое выглядит следующим образом:

Cp /source/path/name /target/path/name

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
          • file_two
          • file_three
        • folder_two
          • file4

Если вы хотите скопировать file_one из текущего местоположения в / home/ documents / folder_one в / home/ documents / folder_two, то вы должны ввести следующую команду в командной строке:

Cp /home/andreyex/documents/folder_one/file_one /home/andreyex/documents/folder_two/file_one

Есть некоторые ярлыки вы можете сделать здесь.

/ Главная часть может быть заменена на тильду (~), что объясняется в этой статье. Это изменяет команду на эту

cp ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Вы можете просто опустить имя файла для цели, если вы собираетесь использовать то же имя файла

Cp ~/documents/folder_one/file_one ~/documents/folder_two

Если вы уже в целевой папке вы можете просто заменить путь к цели с полной остановкой.

Cp ~/documents/folder_one/file_one

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

Как сделать резервную копию перед копированием файлов в Linux

В предыдущем разделе folder_one содержит файл с именем file_one и folder_two не делает. Представьте себе, что folder_two имеет файл с именем file_one и вы запустили следующую команду:

Cp file_one ~/documents/folder_two

Приведенная выше команда будет перезаписывать file_one, который в настоящее время находится в folder_two. Там нет подсказок, нет предупреждения и сообщения об ошибках, потому что, вы указали действительную команду.

Вы можете принять меры предосторожности при копировании файлов, получая Linux для создания резервной копии файла, прежде чем он переписывает его. Просто используйте следующую команду:

Cp -b /source/file /target/file

Например:

Cp -b ~/documents/folder_one/file_one ~/documents/folder_two/file_one

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

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

Cp --backup=numbered ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Имя файла для резервных копий будет вдоль меняться 1.~1~, file_one.~2~ и т.д.

Как запросить перед перезаписью файлов при копировании в Linux

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

Для этого используйте следующий синтаксис:

Cp -i /source/file /target/file

Например:

Cp -i ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Сообщение будет выглядеть следующим образом: cp: overwrite ‘./file1’?

Для перезаписи файла нажмите Y на клавиатуре или для отмены нажмите N или CTRL и C одновременно.

Что происходит при копировании символьных ссылок в Linux

Представьте себе, вы имеете следующую структуру папок:

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
        • folder_two
          • file_one (symbolic links points to folder_one/file_one)
        • folder3

Посмотрите на следующую команду:

Cp ~/documents/folder_one/file_one ~/documents/folder3/file_one

Это не должно быть ничего нового, так как он копирует физический файл из одной папки в другую.

Что происходит, однако, если скопировать символическую ссылку из folder_two в folder3?

Cp ~/documents/folder_two/file_one ~/documents/folder3/file_one

Файл, который копируется в folder3 не будет символической ссылкой. Это на самом деле файл, на который указывает символическая ссылка, так на самом деле вы получите тот же результат, как если бы путем копирования file_one из folder_one.

Кстати вы можете получить тот же результат с помощью следующей команды:

Cp -H ~/documents/folder_two/file_one ~/documents/folder3/file_one

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

Cp -L ~/documents/folder_two/file_one ~/documents/folder3/file_one

Если вы хотите скопировать символическую ссылку необходимо указать следующую команду:

Cp -d ~/documents/folder_two/file_one ~/documents/folder3/file_one

Cp -P ~/documents/folder_two/file_one ~documents/folder3/file_one

Как создавать жесткие ссылки с помощью команды ср

Это руководство расскажет вам все, что вам нужно знать о жестких ссылках.

Cp -l ~/source/file ~/target/file

В качестве примера того, почему вы могли бы использовать жесткую ссылку учесть, что у вас есть папка под названием видео и в этой папке видео у вас есть действительно большой видео файл с именем honeymoon_video.mp4. Теперь представьте, что вы также хотите, чтобы видео быть известным как barbados_video.mp4, потому что он также имеет кадры Барбадоса.

Вы можете просто скопировать файл и дать ему новое имя, но это означает, что вы увеличиваете в два раза больше дискового пространства для того, что, по существу, то же самое видео.

Вы могли бы вместо того, чтобы создать символическую ссылку с именем barbados_video.mp4, которая указывает на файл honeymoon_video.mp4. Это будет работать хорошо, но если кто-то удалил honeymoon_video.mp4 вы остались бы со ссылкой и ничего другого и связь по-прежнему занимает дисковое пространство.

Единственное отличие состоит в том, что они содержат разное количество индексных дескрипторов. (уникальные идентификаторы). Удаление файла honeymoon_video.mp4 не удаляет файл, но только снижает количество для этого файла на 1. Файл будет удален только если все ссылки на этот файл будут удалены.

Cp -l /videos/honeymoon_video.mp4 /videos/barbados_video.mp4

Как создать символические ссылки с помощью команды ср

Cp -s /source/file /target/file

Опять же я бы лично вообще используют команду ln -s, но вместо этого работает хорошо.

Как скопировать файлы, если они новее

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

Cp -u /source/file /target/file

Стоит отметить, что если файл не существует на целевой стороне, то копия будет иметь место.

Как скопировать несколько файлов

Вы можете предоставить более одного исходного файла внутри команды копирования следующим образом:

Cp /source/file_one /source/file_two /source/file_three /target

Приведенная выше команда будет копировать file_one, file_two и file_three в целевую папку.

Если файлы соответствуют определенному шаблону, то вы можете также использовать групповые символы следующим образом:

Cp /home/andreyex/music/*.mp3 /home/andreyex/music2

Приведенная выше команда будет копировать все файлы с расширением.mp3 в папку music2.

Как скопировать папки

Копирование папок такое же, как копирование файлов.

Например представьте, что вы имеете следующую структуру папок:

  • home
    • andreyex
      • documents
        • folder_one
          • file_one
          • file_two
        • folder_two

Представьте, что вы хотите переместить папку folder_one в папку folder_two следующим образом:

  • home
    • andreyex
      • documents
        • folder_two
          • folder_one
            • file_one
            • file_two

Вы можете использовать следующую команду:

Cp -r /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

Кроме того, можно использовать следующую команду:

Cp -R /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

Это копирует содержимое folder_one, а также любые суб-каталоги и файлы в пределах подкаталогов.

Резюме

Это руководство дало вам инструменты требующиеся для копирования файлов в Linux. Для всего остального вы можете использовать команду Linux man.

Команда cp и есть та палочка-выручалочка, которая всегда придет на помощь. Если Вы только что установили линукс и у Вас не установлен , а для настройки выхода в интернет необходимо сконфигурировать определенные файлы, то команда cp выручит нас, как никакая другая.
Допустим, для настройки выхода в интернет Вам нужно изменить некоторые файлы, но из-за отсутствия прав доступа к ним Вы не можете этого сделать посредством графического интерфейса. Но зато Вы можете создать файл посредством графического интерфейса в любой доступной папке (например /home/имя_пользователя), заполнить его согласно инструкции или мануалу и, запустив с последующей , заменить при помощи команды cp существующий файл на созданным Вами.
Например, Вам, как и мне, понадобилось изменить файл /etc/network/interfaces. Лично я, при помощи графического интерфейса, создал файл interfaces в /home/viuktor/. Скопировал в него содержимое оригинала (файла /etc/network/interfaces), добавил нужные строки и сохранил. А потом, при помощи cp заменил файл /etc/network/interfaces файлом /home/viuktor/interfaces..
Правда, выполняя данную операцию, следует проявить максимальное внимание, ведь очень часто некоторые файлы требуется дополнить одной или более строками. Потому, если в мануле сказано «добавьте…», ни в коем случае не забывайте скопировать все из оригинала в созданный вами файл.

Команда cp применяется для копирования и переноса файлов.

Она имеет следующий синтаксис cp {параметр} <источник> <пункт назначения>

ОПИСАНИЕ В первой форме утилита cp копирует содержимое файла исходный_файл в целевой_файл. Во второй форме содержимое каждого указанного файла копи- руется в целевой_каталог. Имена самих файлов при этом не изменяются. Если cp обнаруживает попытку копирования файла самого в себя, копирование не производится. Имеются следующие опции: -H Если указана опция -R, следовать символическим ссылкам, указанным в командной строке, но не следовать символическим ссылкам, встречаю- щимся в процессе обхода дерева каталогов. -L Если указана опция -R, следовать всем символическим ссылкам. -P Если указана опция -R, не следовать никаким символическим ссылкам. Это режим работы по умолчанию. -R Если исходный_файл указывает на каталог, cp копирует этот каталог вместе со всем деревом файловой иерархии, которое он содержит. Ес- ли исходный_файл оканчивается на /, копируется не сам каталог, а только его содержимое. Эта опция также указывает на необходимость копирования символических ссылок, а не объектов, на которые они указывают, и заставляет cp создавать специальные файлы вместо того, чтобы копировать их, как обычные. Создаваемые каталоги имеют те же права доступа, что и исходные каталоги, вне зависимости от действу- ющего для процесса значения umask. Обратите внимание, что cp копирует жёсткие ссылки как отдельные файлы. Если вам нужно сохранять жёсткие ссылки, используйте tar(1), cpio(1) или pax(1). -f Для каждого уже существующего целевого имени пути, удалять его и создавать новый файл, не требуя подтверждения операции, вне зависи- мости от его прав доступа. (Опция -f отменяет действие любой из ранее указанных опций -i или -n.) -i Заставляет cp выдавать запрос через стандартный файл ошибок перед копированием файла, которое бы вызвало перезапись существующего файла. Если ответ, полученный со стандартного ввода, начинается символом `y" или `Y", будет предпринята попытка копирования. (Опция -i отменяет действие любой из ранее заданных опций -f или -n.) -l Создавать жёсткие ссылки на обычные файлы в иерархии вместо того, чтобы их копировать. -n Не перезаписывать существующие файлы. (Опция -n отменяет действие любой из предшествующих опций -f или -i.) -p Заставляет cp сохранять следующие атрибуты каждого исходного файла в создаваемой копии: время модификации, время доступа, флаги файла, режим доступа, идентификаторы пользователя и группы, насколько это позволено правами доступа. Если значения идентификаторов пользователя и группы не могут быть сохранены, не выводится никакого сообщения об ошибке, и возвращае- мое программой значение статуса завершения не изменяется. Если исходный файл имеет установленный бит set-user-ID и значение идентификатора пользователя не может быть сохранено, бит set-user- ID в атрибутах копии не сохраняется. Если исходный файл имеет установленный бит set-group-ID и значение идентификатора группы не может быть сохранено, бит set-group-ID в атрибутах копии не сохра- няется. Если исходный файл имеет установленные биты set-user-ID и set-group-ID и значение либо идентификатора пользователя, либо идентификатора группы не может быть сохранено, ни один из битов set-user-ID и set-group-ID в атрибутах копии не сохраняется. -v Выводить больше информации, показывая файлы по мере их копирования. Для каждого уже существующего целевого файла, его содержимое перезаписы- вается, если позволяют права. Его режим доступа и идентификаторы пользо- вателя и группы не изменяются, если не задана опция -p. Во второй синтаксической форме целевой_каталог должен существовать, если только не был указан единственный исходный_файл, являющийся каталогом, и опция -R. Если целевой файл не существует, используются права исходного файла, изменённые в соответствии со значением umask (см. csh(1)). Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одному владельцу. Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасы- вается, если только исходный файл и файл назначения не принадлежат одной группе, а пользователь является членом этой группы. Если установлены оба бита, и set-user-ID, и set-group-ID, должны быть соблюдены оба вышеупомя- нутых условия, в противном случае оба этих бита сбрасываются. Для создания или перезаписи файлов требуются соответствующие права доступа. Утилита cp всегда следует символическим ссылкам, если только не указана опция -R (в этом случае она по умолчанию символическим ссылкам не сле- дует). Опции -H или -L (совместно с опцией -R) приводят к тому, что cp будет следовать символическим ссылкам, как описано выше. Опции -H, -L и -P игнорируются, если не указана опция -R. Кроме этого, эти опции отме- няют друг друга, и действия команды определяются той опцией, которая была указана последней. Если cp получает сигнал SIGINFO (см. аргумент status для stty(1)), на стандартный вывод будут выведены имена текущего исходного и целевого фай- лов, а также прогресс копирования в процентах. СТАТУС ЗАВЕРШЕНИЯ Утилита cp возвращает 0 в случае успешного завершения и >0 в случае воз- никновения ошибки. СОВМЕСТИМОСТЬ Старые версии cp имели опцию -r. Данная реализация поддерживает эту опцию, однако её поведение отличается от исторического. Использование этой опции настоятельно не рекомендуется, так как её поведение зависит от конкретной реализации. Во FreeBSD, -r является синонимом для -RL и рабо- тает так же, если это не переопределено другими флагами. Реализация -r в старых версиях отличалась тем, что при воссоздании иерархии файлов специ- альные файлы копировались как обычные. Опции -v и -n являются нестандартными и их использование в командных сце- нариях не рекомендуется. СМОТРИ ТАКЖЕ mv(1), rcp(1), umask(2), fts(3), symlink(7) ИСТОРИЯ Команда cp появилась в Version 1 AT&T UNIX.

Updated: 12/29/2017 by Computer Hope

About cp

The cp command is makes copies of files and directories.

Syntax

cp [option ]... [-T ] source destination cp [option ]... source ... directory cp [option ]... -t directory source ... cp --help cp --version

Options

-a ,
--archive
Same as -dR --preserve=ALL . When performing the copy, attempt to preserve as much of the original file structure, attributes, and associated metadata as possible. This metadata includes security context data if you are running SELinux .
--attributes-only Don"t copy the file data, just create a file with the same attributes . If the destination file already exists, don"t alter its contents. You can control exactly which attributes are copied with the --preserve option.
--backup [= control ] Make a backup of each existing destination file that would otherwise be overwritten or removed. The control parameter specifies what version control method to use; see for details.

As a special case, cp --force --backup will make a backup of source when source and dest are the same, regular file.

-b Like --backup , but does not accept a control argument; the default control method is always used.
--copy-contents When operating recursively , copy contents of special files, such as FIFOs and devices found in /dev . You usually don"t want to use this option, because it can have undesired results, such as hanging forever or filling up your entire disk. However, this option is available for special, expert use cases.
-d Copy symbolic links themselves, rather than the files they refer to, and preserve hard links between source files in the copies. Same as "--no-dereference --preserve=links ".
-f ,
--force
If an existing destination file cannot be opened, remove it and try again. This option has no effect if the -n /--no-clobber option is used. However, it applies independently of -i /--interactive ; neither option cancels the effect of the other.
-i ,
--interactive
Prompt before overwrite (overrides a previous -n option).
-H Follow symlinks specified on the command line, but preserve discovered links.

The directory representing the mount point itself will be copied, but not traversed.

If -v is specified, you will see exactly which files have been skipped.

--help Display a help message, and exit.
--version Output version information, and exit.

By default, sparse source files are detected by a crude heuristic and the corresponding destination file is made sparse as well. That is the behavior selected by --sparse=auto . Specify --sparse=always to create a sparse destination file whenever the source file contains a long enough sequence of zero bytes. Use --sparse=never to inhibit creation of sparse files.

When --reflink [=always ] is specified, cp performs a lightweight copy, where the data blocks are copied only when modified. If this is not possible, the copy fails; or, if --reflink=auto is specified, cp falls back to a standard copy operation.

Version control

When using -b /--backup , the backup suffix is "~ ", unless set with --suffix or SIMPLE_BACKUP_SUFFIX . The version control method may be selected via the --backup= control option or through the VERSION_CONTROL environment variable . The possible values of control or VERSION_CONTROL are:

none , off Never make backups (even if --backup is given).
numbered , t Make numbered backups.
existing , nil Numbered if numbered backups exist, simple otherwise.
simple , never Always make simple backups.

As a special case, cp makes a backup of source when the force and backup options are given and source and destination are the same name for an existing, regular file.

Examples

Let"s say you have a file named picture.jpg in your working directory , and you want to make a copy of it called picture-02.jpg . You would run the command:

Cp picture.jpg picture-02.jpg

And the file will be copied. Here, picture.jpg is the source of the copy operation, and picture-02.jpg is the destination. Both files now exist in your working directory.

The source and destination files may also reside in different directories. For instance,

Cp /home/chuck/pictures/picture.jpg /home/chuck/backup/picture.jpg

Will make a copy of the file /home/chuck/pictures/picture.jpg in the directory /home/chuck/backup . The destination file will also be named picture.jpg .

If you are the user chuck , you can abbreviate your home directory ("/home/chuck ") using a tilde ("~ "). For instance,

Cp ~/pictures/picture.jpg ~/backup/picture.jpg

Functions the same as the above command when it is run by chuck .

Copying multiple files to a directory

Or, perhaps you want to copy multiple files into another directory. To accomplish this, you can specify multiple files as the source, and a directory name as the destination. Let"s say you are the user sally , and you have a bunch of files in the directory /home/sally/pictures/ named picture-01.jpg , picture-02.jpg , etc. and you want to copy them into the directory /home/sally/picture-backup/ . This command will do the trick:

Cp ~/pictures/picture-*.jpg ~/picture-backup cp -i oldfile newfile

If newfile already exists, you will be prompted:

Cp: overwrite ‘newfile’?

If you type y (or yes , Y , YES , or any other combination of upper and lowercase of these), then newfile will be overwritten with a copy of origfile . Typing anything else will abort the operation.

Copy a file into another directory

cp origfile /directory/subdirectory

origfile . The copy will be located in the directory /directory/subdirectory , and will be named origfile .

Cp origfile /directory/subdirectory/.

Same as the above command. The slash-dot (/. ) is implied in the above form of the command. (The dot is a special file in every Linux directory which means "this directory.")

Copy a file into another directory, and give it a new name

cp origfile /directory/subdirectory/newfile

Creates a copy of the file in the working directory named origfile . The copy will be named newfile , and will be located in the directory /directory/subdirectory .

Copy multiple files into another directory, using a wildcard

cp file* /directory/subdirectory

file into the directory /directory/subdirectory . The asterisk ("* ") is a wildcard — a special character which expands to match other characters. Specifically, the asterisk wildcard matches zero or more non-whitespace characters. For instance, this command will copy any files named file , file001 , file.txt , fileone.jpg , file-archive.zip , etc.

Cp file*.jpg /directory/subdirectory

Copy every file in the working directory whose name begins with file , and ends with the file extension .jpg . For instance, it would make copies of any files named file , file001.jpg , file002.jpg , or file-new.jpg , etc. The copies will be placed into the directory /directory/subdirectory .

Copy an entire directory structure to another location

cp -R /one/two /three/four

Copy the directory two (located in the directory /one ), and everything two contains, into the destination directory /three/four . The result will be called /three/four/two . The directory /three must already exist for the command to succeed. If the directory four does not already exist in the directory /three , it will be created.

Cp file1.txt newdir

Copies the file1.txt in the working directory to the newdir subdirectory.

Cp /home/public_html/mylog.txt /home/public_html/backup/mylog.bak

Copies the file mylog.txt in the public_html directory into the public_html/backup directory as mylog.bak .

Cp -u *.txt newdir

Copy all files ending in .txt into the newdir directory, but only if the files do not already exist in the new directory, or if the files being copied are newer.

Cp -R /home/hope/files/* /home/hope/backup

Recursively copies all the files, directories, and subdirectories in the /home/hope/files directory into the /home/hope/backup directory. If the directory backup does not exist in the directory /home/hope , it will be created.

cp --backup origfile newfile

If newfile newfile origfile . By default, the backup of newfile will be named newfile~ .

cp --backup=numbered origfile newfile

If newfile already exists, make a backup of the existing newfile before overwriting it with a copy of origfile . The backup of newfile will be named newfile.~1~ if no other backup exists, or newfile.~2~ if newfile.~1~ exists, etc.

Related commands

dd — Copy and convert the encoding of files.
ln — Create a link, or a symbolic link, to a file or directory.
mv — Move files and directories from one location to another, and optionally rename them.

cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] исходный_файл целевой_файл cp [-R [-H | -L | -P]] [-f | -i | -n] [-lpv] исходный_файл целевой_каталог В первой форме утилита cp , копирует содержимое файла исходный_файл в целевой_файл . Во второй форме содержимое каждого указанного файла копируется в целевой_каталог . Имена самих файлов при этом не изменяются. Если cp обнаруживает попытку копирования файла самого в себя, копирование не производится.

Возможно использование следующих опций: -H Если указана опция -R , следовать по символическим ссылкам, указанным в командной строке, но не следовать по символическим ссылкам, встречающимся в процессе обхода дерева каталогов. -L Если указана опция -R , следовать всем символическим ссылкам. -P Если указана опция -R , не следовать никаким символическим ссылкам. Это режим работы cp по умолчанию. -R Если аргумент исходный_файл указывает на каталог, cp копирует этот каталог вместе со всем деревом файловой иерархии, которое он содержит. Если исходный_файл оканчивается на / , копируется не сам каталог, а только его содержимое. Эта опция также указывает на необходимость копирования символических ссылок, а не объектов, на которые они указывают, и заставляет cp создавать специальные файлы вместо того, чтобы копировать их, как обычные. Создаваемые каталоги имеют те же права доступа, что и исходные каталоги, вне зависимости от действующего для процесса значения umask . Обратите внимание, что cp копирует жёсткие ссылки как отдельные файлы. Если вам нужно сохранять жёсткие ссылки, используйте tar(1) , cpio(1) или pax(1) . -f Для каждого уже существующего целевого имени пути, удалять его и создавать новый файл, не требуя подтверждения операции, вне зависимости от его прав доступа. (Опция -f отменяет действие любой из ранее указанных опций -i или -n ). -i Если в результате копирования будет перезаписан существующий файл, cp запросит подтверждение пользователя. Если ответ, полученный со стандартного ввода, начинается символом "y " или "Y ", будет предпринята попытка копирования (опция -i отменяет действие любой из ранее заданных опций -f или -n ) -l Создавать жёсткие ссылки на обычные файлы в иерархии вместо того, чтобы их копировать. -n Не перезаписывать существующие файлы. (Опция -n отменяет действие любой из предшествующих опций -f или -i ). -p Заставляет cp сохранять следующие атрибуты каждого исходного файла в создаваемой копии: время модификации, время доступа, флаги файла, режим доступа, идентификаторы пользователя и группы, насколько это позволено правами доступа. Если значения идентификаторов пользователя и группы не могут быть сохранены, не выводится никакого сообщения об ошибке, и возвращаемое программой значение статуса завершения не изменяется. Если исходный файл имеет установленный SUID бит и значение идентификатора пользователя не может быть сохранено, SUID бит в атрибутах скопированного файла не сохраняется. Если исходный файл имеет установленный бит SGID и значение идентификатора группы не может быть сохранено, бит SGID в атрибутах копии не сохраняется. Если исходный файл имеет установленные биты SUID и SGID и значение либо идентификатора пользователя, либо идентификатора группы не может быть сохранено, ни один из битов SUID и SGID в атрибутах копии не сохраняется. -v Выводить больше информации, показывая файлы по мере их копирования.

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

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

Если целевой файл не существует, используются права доступа исходного файла, изменённые в соответствии со значением umask (см. csh(1) ). Если исходный файл имеет установленный бит SUID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одному владельцу. Если исходный файл имеет установленный бит set-user-ID, этот бит сбрасывается, если только исходный файл и файл назначения не принадлежат одной группе, а пользователь является членом этой группы. Если установлены оба бита, и SUID, и SGID, должны быть соблюдены оба вышеупомянутых условия, в противном случае оба этих бита сбрасываются.

Для создания или перезаписи файлов требуются соответствующие права доступа.

Программа cp всегда следует символическим ссылкам, если только не указана опция -R (в этом случае она по умолчанию символическим ссылкам не следует). Опции -H или -L (совместно с опцией -R ) приводят к тому, что cp будет следовать символическим ссылкам, как описано выше. Опции -H , -L и -P игнорируются, если не указана опция -R . Кроме этого, эти опции отменяют друг друга, и действия команды определяются той опцией, которая была указана последней.

Если cp получает сигнал SIGINFO (см. аргумент status для stty(1) ), на стандартный вывод будут выведены имена текущего исходного и целевого файлов, а также прогресс копирования в процентах.

СТАТУС ЗАВЕРШЕНИЯ

Программа cp возвращает 0 в случае успешного завершения и >0 в случае возникновения ошибки.

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

Старые версии cp имели опцию -r . Данная реализация поддерживает эту опцию, однако её поведение отличается от исторического. Использование этой опции настоятельно не рекомендуется, так как её поведение зависит от конкретной реализации. В , -r является синонимом для -RL и работает так же, если это не переопределено другими флагами. Реализация -r в старых версиях отличалась тем, что при воссоздании иерархии файлов специальные файлы копировались как обычные.

Опции -v и -n являются нестандартными и их использование в командных сценариях не рекомендуется.

СМОТРИ ТАКЖЕ

mv(1), rcp(1), umask(2), fts(3), symlink(7)

СТАНДАРТЫ Предполагается, что утилита cp совместима со стандартом IEEE Std 1003.2 (``POSIX.2"").

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. -p, --preserve Защищает оригинальные параметры файла, такие как владелец, группа, права доступа и временные штампы. --preserve= АТРИБУТЫ (начиная с версии file-utils 4.1) Здесь параметр АТРИБУТЫ может принимать одно из значений "mode" (права доступа), "ownership" (владелец и группа), "timestamps" (временные штампы), "links", "all" (всё перечисленное). -P, --no-dereference (начиная с версии file-utils 4.1) См. выше описание POSIX. Эта опция заменяет опцию -P в file-utils 4.0, которая была синонимом опции --parents. См. также опцию -d выше. --parents (начиная с версии file-utils 4.0 также -P) Формирует имя каждого копируемого файла путем добавления к имени каталога, в который осуществляется копирование, символа косой черты (/) и указанного полного имени исходного файла. Последний заданный аргумент cp должен быть именем существующего каталога. Например, команда cp --parents a/b/c existing_dir копирует файл a/b/c в existing_dir/a/b/c, создавая отсутствующие промежуточные каталоги. -r В file-utils 4.1: синоним опции -R. В file-utils 4.0: Копирует каталоги рекурсивно, копирует любые не-каталоги и не символьные ссылки (то есть FIFO и специальные файлы), как если бы они были обычными файлами. Это глупое поведение можно получить в file-utils 4.1 если указать опцию --copy-contents. -R, --recursive Копирует каталоги рекурсивно, защищая не-каталоги. --reply= HOW (начиная с версии file-utils 4.1) Здесь аргумент HOW может принимать одно из значений "yes", "no", "query", определяя какой ответ будет автоматически даваться на все вопросы: "да", "нет" или "запрос" пользователю соответственно. --remove-destination (начиная с версии file-utils 4.1) Удаляет каждый существующий (в том месте куда происходит копирование) файл, перед копированием. В версии file-utils 4.0 эта опция неявно включалась при указании опции -f. --sparse= КОГДА Разреженный (sparse) файл содержит дыры -- последовательности нулевых байт, которые не занимают физических блоков на диске; системный вызов read читает их как нули. Такой подход может как сохранить дисковое пространство, так и увеличить скорость работы, потому что многие бинарные файлы содержат много расположенных последовательно нулевых байт. По умолчанию, cp определяет дыры в исходном файле с помощью простой эвристики и делает соответствующий выходной файл также разреженным. Параметр КОГДА может принимать следующие значения: auto Поведение по умолчанию: выходной файл является разреженным, если входной файл также является разреженным. always Всегда делать выходной файл разреженным. Это полезно, когда входной файл расположен на файловой системе, которая не поддерживает разреженные файлы, а выходной файл будет располагаться на файловой системе, которая их поддерживает. never Никогда не делать выходные файлы разреженными. Если вы нашли применение для этой опции, дайте нам знать. --strip-trailing-slashes (начиная с file-utils 4.1) Удаляет все конечные символы `´ из каждого аргумента. (Это может изменить интерпретацию аргумента, если он является символьной ссылкой на каталог.) -s, --symbolic-link Делает символьные ссылки вместо копирования не-каталогов. Все имена исходных файлов должны быть полными, т. е. начинаться с символа /, за исключением случая, когда символьные ссылки будут создаваться в текущем каталоге. Эта опция генерирует сообщение об ошибке, если система не поддерживает символьные ссылки. -S Суффикс резервной копии, см. ниже. --target-directory= КАТАЛОГ (начиная с версии file-utils 4.1) Задаёт каталог назначения, куда будет осуществляться копирование. Имеется в виду для использования с xargs (1), как, например, в "ls | xargs cp --target- directory=../d". -u, --update Не копировать не-каталоги, которые уже существуют в том месте, куда осуществляется копирование, если они имеют такое же или более раннее время модификации. -v, --verbose Выводить имя каждого файла перед его копированием. -x, --one-file-system Пропускать подкаталоги, которые расположены на файловых системах, отличных от той, где начиналось копирование.

ОПЦИИ РЕЗЕРВНОГО КОПИРОВАНИЯ 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 Всегда делать простые резервные копии.

СТАНДАРТНЫЕ ОПЦИИ 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; другие версии могут иметь небольшие отличия. Исправления и дополнения присылайте по адресу [email protected] . Сообщения об ошибках в этой программе присылайте по адресу [email protected] .

ПЕРЕВОД

Перевёл с английского Виктор Вислобоков 2003
Статьи по теме: