Команда cp

Thank you for reading this post, don't forget to subscribe!

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

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

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

 

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

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

 

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

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

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

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

 

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

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

 

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

 

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

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

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

 

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

 

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

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

 

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

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

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

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

 

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

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

 

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

 

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

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

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

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

 

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

 

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

 

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

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

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

 

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

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

 

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

 

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

 

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

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

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

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

 

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

 

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

 

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

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

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

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

 

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

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