Поиск по сайту:
Критерий истины не практика, а собственная душа (Авессалом Подводный).

Команда cp в Linux. 7 практических примеров

26.11.2018

Команда cp в Linux используется для копирования файлов и каталогов. В этой статье вы узнаете некоторые основные применения команды cp.

Одна из команд, которые вы должны знать в Linux, — cp. Это сокращение от copy, и она делает именно то, что предполагает ее название: она копирует.

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

 

7 примеров использования команды cp в Linux

Давайте посмотрим, как вы можете использовать команду cp для различных целей:

 

1. Как скопировать файл

Самый простой пример — скопировать файл. Для этого вам просто нужно указать исходный файл и целевой каталог или файл.

cp source_file target_directory / target_file

 

В приведенном выше примере, если target_fille не существует в target_directory, он создаст файл target_file.

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

Мы покажем вам, как бороться с перезаписью файлов позже в этой статье.

Примечание
Имейте в виду: по умолчанию команда cp перезаписывает, если целевой файл уже существует. Это поведение может быть изменено с помощью опции -n или -i, описанной ниже.

 

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

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

cp file1 file2 file3 fileN target_directory

 

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

 

3. Несколько способов обработки перезаписи при копировании файлов.

Вероятно, вы не всегда хотите, чтобы ваши существующие файлы целей были перезаписаны, и это абсолютно логично.

Чтобы предотвратить перезапись существующих файлов, вы можете использовать опцию -n. Таким образом, cp выиграл ‘перезаписать существующие файлы.

cp -n source_file target_directory

 

Но, возможно, вы хотите перезаписать некоторые файлы. Вы можете использовать интерактивную опцию -i, и она спросит вас, хотите ли вы перезаписать существующие файлы.

cp -i source_file target_directory
cp: overwrite 'target_directory/source_file'?

 

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

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

cp -b file.txt target_dir / file.txt 
ls target_dir 
file.txt file.txt ~

 

Резервная копия файла заканчивается на ~.

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

Подвести итоги:

  • -i: Подтвердить перед перезаписью
  • -n: Нет перезаписи
  • -b: Перезапись с резервным копированием
  • -u: Перезаписать, если целевой файл устарел или не существует

 

4. Как скопировать каталог

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

cp -r source_dir target_dir

 

Это скопирует весь source_dir в target_dir. Теперь source_dir будет подкаталогом target_dir.

ls target_dir 
source_dir

 

5. Как скопировать только содержимое каталога, а не самого каталога

В предыдущем примере вы скопировали весь каталог в новое место.

Но если вы просто хотите скопировать содержимое исходного каталога в целевой каталог, вы должны добавить /. в конце исходного каталога. Это укажет на то, что вы хотите скопировать содержимое исходного каталога.

Посмотрим на пример:

ls source_dir 
source_file_1 source_file2

 

Теперь скопируйте содержимое исходного каталога:

cp -r source_dir/. target_dir

 

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

ls target_dir 
source_file_1 source_file2

 

6. Как скопировать несколько каталогов

Вы также можете скопировать несколько каталогов одновременно с помощью команды cp в Linux.

Просто используйте его так же, как и для одного каталога.

cp -r source_dir1 source_dir2 source_dir3 target_dir

 

Это всегда последний аргумент в команде, который принимается как целевой каталог.

Если вы хотите скопировать только содержимое нескольких каталогов одновременно, вы также можете это сделать:

cp -r source_dir1 /. source_dir2 /. source_dir3 /. target_dir

 

Фактически, вы можете смешивать каталоги, их содержимое и файлы в целом.

cp -r source_dir1 source_dir2 /. source_file target_dir

 

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

 

7. Как сохранить атрибуты при копировании

Когда вы копируете файл в новое место, его атрибуты, такие как права доступа к файлам и временные метки файла, изменяются.

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

Давайте посмотрим на пример.

ls -l /etc/services 

-rw-r - r-- 1 root root 19183 12 Jan 2018 /etc/services

 

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

ls -l /etc/services 
-rw-r--r-- 1 root root 19183 Jan 12  2018 /etc/services

 

Но если мы используем параметр p, скопированный файл сохранит режим, право собственности и отметку времени.

cp /etc/services .
ls -l services 
-rwxrwxrwx 1 andreyex andreyex 19183 Nov 27 23:16 services

 

Как вы можете видеть, вы сохранили режим доступа и временную метку исходного файла с опцией -p.

Но подождите! Разве это не должно было сохранить право собственности на исходные файлы? Но вот владелец (root) исходного файла был изменен на andreyex,

Это связано с тем, что только root имеет разрешение на изменение права собственности на файл, принадлежащий root. Если вы используете опцию -p с файлом, не принадлежащим root, он сохранит право собственности. Или вы можете запустить команду с помощью sudo, это сохранит право собственности на файл, принадлежащий root.

Вы также можете указать атрибуты, которые хотите сохранить. Но тогда вам придется использовать опцию -preserve.

cp --preserve=timestamp /etc/services .
ls -l services 
-rw-r--r-- 1 andreyex andreyex 19183 Jan 12  2018 services

 

Как видно из вышеприведенного вывода, команда сохранила только временную метку исходного файла.

Примеры, показанные здесь, являются наиболее распространенными, которые вы будете использовать в качестве пользователя Linux, сисадмина или разработчика программного обеспечения.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 3,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
alex

cp -r source_dir target_dir
Это скопирует весь source_dir в target_dir. Теперь source_dir будет подкаталогом target_dir.

подкаталогом ???

alexvgrey

Как скопировать несколько файлов в один файл? Аналог copy a.txt+b.txt c.txt в Windows. Насколько я понял, есть ключ -T, который говорит, что destination будет не папкой, а файлом, но у меня не получилось %(

Читайте также

Спасибо!

Теперь редакторы в курсе.