Команда 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», когда копирую сразу несколько файлов.
Комментарии (0)