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

Команда cp является одной из основных команд, которые вы должны знать, как использовать, когда начинаете использовать Linux.

Основной синтаксис

Начнем с основного синтаксиса команды cp:

cp [OPTIONS] SOURCE DESTINATION

Здесь [OPTIONS] – это флаги, которые вы можете использовать для команды, SOURCE – это файл, который вы хотите скопировать (оригинал), а DESTINATION – это новый файл, который вы хотите создать как копию оригинала.

Вот простой и базовый пример копирования файла .txt.

Если у вас есть каталог (и вы находитесь в нем), в котором есть только файл «plan1.txt», то после выполнения этой команды:

cp plan1.txt plan2.txt

В вашем каталоге появятся plan1.txt и plan2.txt, где plan2.txt – это копия plan1.txt.

Здесь показано до и после с помощью команды cp:

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

cp /directory1/plan1.txt /directory2/plan1.txt

Если файл «plan2.txt» уже существует, а вы пытаетесь скопировать файл в «plan2.txt», команда cp заменит старый файл новой копией.

Переходим к полезным, реальным случаям использования и примерам команды cp.

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

По умолчанию команда cp копирует только файлы. Если вы попытаетесь скопировать каталог с помощью команды cp, вы получите ошибку.

Для копирования каталогов используйте опцию -r (рекурсивный)/flag:

cp -r directory1 directory2

Эта команда скопирует directory1 и все его содержимое в directory2.

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

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

cp plan1.txt plan2.txt plan3.txt directory1

Это скопирует файлы «plan1.txt, plan2.txt, plan3.txt» в каталог «directory1».

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

Как скопировать все файлы в директории сразу

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

Вот пример:

cp /home/directory1/* /opt/directory2

Это скопирует все файлы из «directory1» в «directory2».

Если вам нужны только файлы .txt, вы можете снова использовать подстановочный знак *:

cp /home/directory1/*.txt /opt/directory2

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

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

Если вы работаете в каталоге (например, /home/test/) и хотите скопировать файл из /opt/example/, просто добавьте точку в конце команды. Пример:

cp /opt/example/1.txt .

Если ваш «pwd» – /home/test/, то есть вы сейчас находитесь в каталоге /home/test/, эта команда скопирует файл 1.txt из каталога /opt/example/ в каталог /home/test/.

Этот пример довольно полезен, и я часто его использую.

Как сохранить разрешения и другие файловые (мета)данные

По умолчанию, когда вы копируете файл командой cp, конечный файл (копия) не сохраняет все метаданные, такие как даты, разрешения и т. д. Чтобы сохранить их, достаточно использовать флаг «-p» (preserve). Пример:

cp -p file1.txt file2.txt

Эта команда создаст копию файла file1.txt, и она будет иметь те же атрибуты, такие как даты создания файла, доступа к нему, изменения, права доступа к файлу, идентификатор пользователя и IP группы. Здесь важно отметить тот факт, что копируются разрешения файлов.

Как избежать перезаписи существующих файлов

Часто случается так. Вы пытаетесь скопировать файл, а файл с таким именем уже существует. По умолчанию команда cp затирает старый файл, и вы его теряете. Чтобы избежать этого, можно использовать флаг «-i» (interactive). Пример:

cp -i file1.txt file2.txt

Если файл «file2.txt» уже существует, команда выдаст запрос перед запуском.

Это наиболее часто используемый вариант применения команды cp в моем случае. Перед редактированием важных файлов (например, любого файла конфигурации) разумно создать резервную копию исходного файла, и это занимает всего пару секунд.

Например, если вы планируете редактировать файл «.bash_profile», быстро создайте копию перед его редактированием:

cp .bash_profile .bash_profile.bak

У команды cp также есть другие флаги/опции, о которых мы не говорили. Например, «-u» для перезаписи файла назначения только в том случае, если исходный файл новее файла назначения, и флаг «-v», который отображает информацию о процессе копирования. Я часто использую флаг «-v», когда копирую сразу несколько файлов.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен linuxstans.com

Похожие статьи

Комментарии (0)