- Команда cp: Копируем файлы и папки в терминале Linux
- Копирование в терминале Linux
- Рекурсивное копирование
- Опция -i при копировании
- Заключение
- Linux копирование папки рекурсивно
- Копирование файлов и директорий: команда cp в Linux и MacOS
- Как создать копию файла в текущей директории
- Как скопировать файл в другую директорию
- Как скопировать несколько файлов в другую директорию
- Как скопировать одну директорию в другую
- Копирование директории целиком и копирование всего содержимого из директории
- Как предотвратить перезапись файлов при копировании
- Флаг —interactive
- Флаг —no-clobber
- Другие опции
Команда cp: Копируем файлы и папки в терминале Linux
В данной статье мы разберемся как копировать в терминале Linux папки и файлы. Эти знания вам могут пригодится, если вдруг у вас не будет графического окружения Linux. Да и знания терминала вам поможет в освоении Linux систем, хотя на данный момент можно обойтись в некоторых дистрибутивах вообще без терминала. Но, терминал, это основа Linux, и без него вам может быть тяжко в решении каких либо ситуаций. На сайте уже имеются некоторые статьи на тему освоения терминала в Linux, так что при желании вы можете их найти и ознакомится с ними. Ну а мы вернемся к теме копирования файлов и папок в терминале Linux. При копировании, да и вообще система Linux чувствительна к регистру, так что вводя команды будьте внимательны.
Копирование в терминале Linux
Для копирования используется команда “cp”, у нее так же имеются некоторые опции, о которых вы узнаете чуть позже. Для того что бы скопировать какие то файлы или папки, необходимо ввести команду “cp”, далее, при необходимости указать путь до директории где находится папка или файл который вы ходите скопировать. После чего указываем путь до директории куда хотим скопировать. Так же возможно, вне домашнего каталога вам придется работать от root пользователя при копировании информации. И так, давайте приступим, например, мне необходимо скопировать файл под названием “test” в директорию “Документы”. Для этого ввожу команду “cp” далее название файла и путь куда хочу скопировать данный файл. При это не забываем про регистр, как мы помним, Linux чувствителен к нему:
Теперь усложним немного и скопируем файл который находится в директории “/tmp”. Как вы помните, при копировании вне домашнего каталога вам нужны будут права root пользователя. А иначе у вас не чего не получится:
Что бы получить права root пользователя на копирования из директории “/tmp”, как вы могли уже догадаться, необходимо перед командой “cp” ввести слово “sudo”:
sudo cp /tmp/test-file /Документы
Предположим, нам необходимо скопировать данный файл по другим именем, для этого снова вводим команду “cp”, далее путь к файлу и путь куда хотим скопировать данный файл. Но, в конце пути куда хотим скопировать, необходимо ввести новое название того файла, который копируем. Например, я хочу скопировать файл “test-file” из директории “/tmp” и переименовать его в “test-cp”, что бы вам было более наглядно, выделю жирным старое название файла, а затем новое:
sudo cp /tmp/test-file /Документы/test-cp
Рекурсивное копирование
Для копирования папок применяется рекурсивное копирование, –recursive (recursive) — копировать каталоги рекурсивно (то есть все подкаталоги и все файлы в подкаталогах). Для этого используется опция “-r”, например, я хочу скопировать папку “test-cp” в директорию “Документы”. Для этого ввожу команду “cp -r”далее указываем путь при необходимости и название папки которую хочу скопировать, после чего указываем путь куда копировать:
При необходимости точно так же как и файлы при копировании, название папки можно изменить, например, назовем папку “test-cp” просто “test”:
cp -r test-cp Документы/test
Опция -i при копировании
При копировании файла в нужную вам директорию, предыдущий файл с таким же именем просто перезапишется. То есть, если вы копируете файл “test-file” из директории “/tmp”, в директорию “Документы”, он заменит в директории уже имеющийся файл “test-file”. Что бы избежать перезаписывания файлов необходимо вести опцию “-i”, тогда при копировании вам будет предложен выбор, перезаписать файл или нет. Вы можете выбрать да или нет, указав это буквами “y- да, перезаписать” или “n- нет, не перезаписывать”:
sudo -i /tmp/test-file Документы
Заключение
Я уже не раз писал, что не стоит боятся терминала Linux, в нем нет ни чего сложно, а порой, бывает и так, что работа в терминале облегчает пользователю жизнь. Так же, если вы пользователь Debian и у вас по каким то причинам нет sudo, вы можете перейти к статье о настройке Debian и добавить вашего пользователя в группу sudo. Вы всегда можете набрать команду “cp –help” для получения справки по данной команде.
А на этом сегодня все. Надеюсь данная статья будет вам полезна.
Журнал Cyber-X
Linux копирование папки рекурсивно
Для копирования файлов используйте команду cp («copy»). Она принимает два аргумента: исходный файл, который существует и должен быть скопирован, и целевой файл, который определяет имя файла-копии. cp создает идентичную копию файла, присваивая ей указанное имя целевого файла. Если файл с таким именем уже существует, cp перезаписывает его. Она не изменяет исходный файл.
Чтобы скопировать файл `my-copy’ в файл `neighbor-copy’, наберите:
$ cp my-copy neighbor-copy [Enter]
Эта команда создает новый файл с именем `neighbor-copy’, который является идентичным файлу `my-copy’ во всех отношениях, кроме имени файла, имени владельца, группы и времени модификации — новый файл имеет время модификации, указывающее момент его копирования. Файл `my-copy’ не изменяется.
Чтобы сохранить все атрибуты оригинального файла, включая его время модификации, имя владельца, группу и права доступа, используйте ключ `-p’ («preserve»)(сохранить).
Чтобы скопировать файл `my-copy’ в файл `neighbor-copy’, сохранив все атрибуты исходного файла в копии, наберите:
$ cp -p my-copy neighbor-copy [Enter]
Эта команда копирует файл `my-copy’ в новый файл `neighbor-copy’, полностью идентичный исходному по всем аспектам, кроме имени файла.
Чтобы скопировать каталог вместе со всеми подкаталогами и файлами, которые он содержит, используйте опцию -R — она создает рекурсивную копию указанного каталога и его содержимого.
Чтобы скопировать каталог `public_html’ вместе со всеми его файлами и подкаталогами, в новый каталог `private_html’, введите:
$ cp -R public_html private_html [Enter]
Опция `-R’ не копирует файлы, являющиеся символической ссылкой, и не сохраняет оригинальные права доступа к файлам. Чтобы скопировать каталог рекурсивно, включая все ссылки и учитывая все права доступа, используйте опцию `-a’ («archive»). Это полезно для резервного копирования больших по объему деревьев каталогов.
Чтобы сделать резервную копию дерева каталогов `public_html’ в каталог `private_html’, введите:
$ cp -a public_html private_html [Enter]
Копирование файлов и директорий: команда cp в Linux и MacOS
Перевод статьи «Copy a Directory in Linux – How to cp a Folder in the Command Line in Linux and Unix (MacOS)».
Для копирования файлов или директорий (папок) в Unix-подобных операционных системах (Linux и MacOS) используется команда cp .
Команда cp относительно простая, но ее поведение может изменяться в зависимости от передаваемых опций и того, что именно (файлы или директории) и куда копируется.
Для просмотра документации или руководства по использованию команды cp выполните в терминале команду man cp :
$ man cp NAME cp -- copy files SYNOPSIS cp [OPTIONS] source_file target_file cp [OPTIONS] source_file . target_directory .
Примечание редакции Techrocks. Также для получения справки можно воспользоваться командой cp —help .
В своей базовой форме эта команда принимает в качестве инпута источник, который вы хотите скопировать, и «пункт назначения» — то, куда именно вы хотите его скопировать. Источником может быть файл, несколько файлов или вообще директория.
cp [OPTIONS] source_file target_file
Как создать копию файла в текущей директории
Чтобы создать копию файла в той же директории, нужно передать команде cp имя исходного файла и имя, которое нужно дать файлу-копии.
Допустим, у вас есть файл a.txt и вы хотите создать его копию под именем b.txt в той же директории:
$ ls a.txt $ cp a.txt b.txt $ ls a.txt b.txt
Для справки: команда ls выводит список файлов в текущей директории.
По умолчанию команда cp использует в качестве пути к файлам вашу текущую директорию.
Как скопировать файл в другую директорию
Чтобы скопировать файл в директорию, отличную от вашей текущей, нужно просто указать путь к ней:
$ ls ../directory-1/ $ cp a.txt ../directory-1/ $ ls ../directory-1/ a.txt
После выполнения команды cp ранее пустая directory-1 содержит файл a.txt.
Примечание редакции Techrocks. В примере показан относительный путь к директории. Две точки перед слэшем означают «родительская директория». Допустим, ваша текущая директория — directory-2, которая находится в директории parent_directory. Команда ls ../directory-1/ выведет список файлов в directory-1, которая тоже находится в parent_directory.
По умолчанию копируемый файл сохраняет свое имя, но вы можете указать любое другое:
$ cp a.txt ../directory-1/b.txt $ ls ../directory-1/ b.txt
Как скопировать несколько файлов в другую директорию
Чтобы одновременно скопировать несколько файлов, вы можете передать команде несколько источников, а в конце указать пункт назначения:
$ ls ../directory-1/ $ cp first.txt second.txt ../directory-1/ $ ls ../directory-1/ first.txt second.txt
В этом примере оба файла (first.txt и second.txt) были скопированы в директорию directory-1.
Примечание: при передаче нескольких источников последний аргумент обязательно должен быть директорией.
Как скопировать одну директорию в другую
Если вы попытаетесь передать команде cp в качестве источника имя директории, вы получите ошибку:
$ cp directory-1 directory-2 cp: directory-1 is a directory (not copied).
Для копирования директории целиком нужно добавить флаг -r (или -R , или —recursive ), указывающий, что копировать надо рекурсивно:
В следующем примере у нас есть две директории (directory-1 и directory-2), расположенные в нашей текущей директории. В directory-1 есть файл a.txt. Мы рекурсивно копируем directory-1 в directory-2. После этого в нашей текущей директории по-прежнему есть directory-1 и directory-2, при этом в directory-2 есть копия directory-1, содержащая файл a.txt.
$ ls directory-1 directory-2 $ ls directory-1 a.txt $ ls directory-2 $ cp -r directory-1 directory-2 $ ls directory-2 directory-1 $ ls directory-2/directory-1 a.txt
Копирование директории целиком и копирование всего содержимого из директории
Примечание редакции Techrocks. Когда мы попробовали применить эту инструкцию в терминале Linux, у нас ничего не вышло. В одной статье мы нашли, что описанный функционал работает в MacOS, но не в Linux. Поэтому здесь мы сначала приведем перевод инструкций автора, а затем от себя дополним их.
При копировании директории есть интересный нюанс. Если директория, которую вы указываете как пункт назначения, уже существует, вы можете скопировать в нее либо все содержимое директории-источника, либо всю директорию-источник целиком. Выбор регулируется добавлением конечного слэша / к имени директории-источника.
Вот описание опции -R в мануале ( man ):
Если файл_источник является директорией, cp копирует директорию и все поддерево, подключенное к этой точке. Если файл_источник заканчивается на / , копируется содержимое этой директории, а не сама директория.
Поэтому, если вы хотите скопировать в другое место только файлы и папки из директории-источника, добавьте в конце слэш / .
$ ls directory-1 a.txt $ cp -r directory-1/ directory-2 $ ls directory-1 directory-2 $ ls directory-2 a.txt
Если вы хотите скопировать всю папку вместе со всем ее содержимым, не добавляйте в конце слэш / .
Для пользователей Linux: после слэша нужно добавить точку. Если хотите почитать более подробно, вот хорошая статья на Хабре.
$ ls directory-1 a.txt $ cp -r directory-1/. directory-2 $ ls directory-1 directory-2 $ ls directory-2 a.txt
Как предотвратить перезапись файлов при копировании
По умолчанию команда cp перезаписывает существующие файлы. Для примера создадим в текущей директории файл a.txt с текстом A, а в директории directory-1 — файл a.txt с текстом B. При копировании файла a.txt из текущей директории в directory-1 файл a.txt перезаписывается (в его содержимом было B, стало A).
$ cat a.txt A $ cat directory-1/a.txt B $ cp a.txt directory-1/a.txt $ cat directory-1/a.txt A
Примечание: команда cat среди прочего служит для вывода содержимого файлов на экран.
Есть два способа предотвратить перезапись файлов.
Флаг —interactive
Чтобы при возможной перезаписи получить предупреждение, можно добавить к команде cp флаг -i (или —interactive):
$ cp -i a.txt directory-1/a.txt overwrite directory-1/a.txt? (y/n [n])
Флаг —no-clobber
Флаг -n (или —no-clobber ) позволяет предотвращать перезапись по умолчанию, не спрашивая пользователя:
$ cat a.txt A $ cat directory-1/a.txt B $ cp -n a.txt directory-1/a.txt $ cat directory-1/a.txt B
На этом примере видно, что благодаря флагу -n содержимое файла directory-1/a.txt не было перезаписано.
Другие опции
Команде cp можно передавать много других полезных опций. Например, -v для «многословного» вывода или -f для «принудительного» выполнения. Я советую почитать страницу man , чтобы хотя бы знать, какие есть варианты.