Команда 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.
Однако, если новый_файл уже существует, он будет перезаписывать его, не спрашивая. Это означает, что содержимое существующего файла цели будет изменено с содержимым исходного файла.
Мы покажем вам, как бороться с перезаписью файлов позже в этой статье.
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
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, сисадмина или разработчика программного обеспечения.
Если вам понравилась эта статья, пожалуйста, поделитесь этой статьей о социальных сетях и различных форумах.