Команда cp в Linux используется для копирования файлов и каталогов. В этой статье вы узнаете некоторые основные применения команды cp.
Одна из команд, которые вы должны знать в Linux, – cp. Это сокращение от copy, и она делает именно то, что предполагает ее название: она копирует.
cp используется для копирования файлов из одного местоположения в другое. cp также можно использовать для копирования всех каталогов в новое место. Вы можете использовать его для копирования нескольких файлов и каталогов.
Давайте посмотрим, как вы можете использовать команду cp для различных целей:
Самый простой пример – скопировать файл. Для этого вам просто нужно указать исходный файл и целевой каталог или файл.
cp source_file target_directory / target_file
В приведенном выше примере, если target_fille не существует в target_directory, он создаст файл target_file.
Однако, если новый_файл уже существует, он будет перезаписывать его, не спрашивая. Это означает, что содержимое существующего файла цели будет изменено с содержимым исходного файла.
Мы покажем вам, как бороться с перезаписью файлов позже в этой статье.
Если вы хотите скопировать несколько файлов одновременно в новое место, вы можете сделать это следующим образом:
cp file1 file2 file3 fileN target_directory
Эта команда скопирует все указанные файлы в целевой каталог. Если в целевом каталоге есть файл(ы), соответствующий имени исходного файла (ов), он будет перезаписан.
Вероятно, вы не всегда хотите, чтобы ваши существующие файлы целей были перезаписаны, и это абсолютно логично.
Чтобы предотвратить перезапись существующих файлов, вы можете использовать опцию -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 исходные файлы будут скопированы только в новое место, если исходный файл более новый, чем существующий, или если он не существует в целевом каталоге.
Подвести итоги:
Вы также можете использовать команду cp для копирования всего каталога, включая все его файлы и подкаталоги. Вы должны использовать параметр -r здесь, который означает рекурсивный.
cp -r source_dir target_dir
Это скопирует весь source_dir в target_dir. Теперь source_dir будет подкаталогом target_dir.
ls target_dir source_dir
В предыдущем примере вы скопировали весь каталог в новое место.
Но если вы просто хотите скопировать содержимое исходного каталога в целевой каталог, вы должны добавить /. в конце исходного каталога. Это укажет на то, что вы хотите скопировать содержимое исходного каталога.
Посмотрим на пример:
ls source_dir source_file_1 source_file2
Теперь скопируйте содержимое исходного каталога:
cp -r source_dir/. target_dir
Если вы проверите содержимое целевого каталога сейчас, вы увидите, что было скопировано только содержимое исходного каталога.
ls target_dir source_file_1 source_file2
Вы также можете скопировать несколько каталогов одновременно с помощью команды 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
Когда вы копируете файл в новое место, его атрибуты, такие как права доступа к файлам и временные метки файла, изменяются.
Если вы хотите сохранить атрибуты исходного файла, вы можете скопировать файлы с помощью опции -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, сисадмина или разработчика программного обеспечения.
Если вам понравилась эта статья, пожалуйста, поделитесь этой статьей о социальных сетях и различных форумах.
cp -r source_dir target_dir
Это скопирует весь source_dir в target_dir. Теперь source_dir будет подкаталогом target_dir.
подкаталогом ???
Как скопировать несколько файлов в один файл? Аналог copy a.txt+b.txt c.txt в Windows. Насколько я понял, есть ключ -T, который говорит, что destination будет не папкой, а файлом, но у меня не получилось %(