Копировать содержимое каталога linux

Содержание
  1. Копировать содержимое каталога linux
  2. Как копировать файлы и каталоги в Linux
  3. Копирование файлов с помощью команды cp
  4. Скопируйте файл в каталог
  5. Копировать несколько файлов
  6. Копирование каталогов с помощью команды cp
  7. Копирование файлов и каталогов с помощью команды rsync
  8. Выводы
  9. Команда cp
  10. Описание команды cp
  11. Синтаксис
  12. Опции
  13. Примеры использования команды cp
  14. Скопировать файл в другую директорию
  15. Скопировать несколько файлов
  16. Скопировать файл с подтверждением
  17. Показать информацию о копируемых файлах
  18. Скопировать директорию
  19. Скопировать только если файлы новее
  20. Не перезаписывать существующие файлы
  21. Скопировать только атрибуты
  22. Создать резервную копию для результирующих файлов, если они существуют
  23. Принудительно перезаписывать существующие файлы назначения
  24. Команда cp: правильное копирование папок с файлами в *nix
  25. Выводы
  26. Послесловие
  27. Команда cp — копирование файлов в Linux из терминала
  28. Синтаксис
  29. Примеры
  30. Регулярные выражения
  31. Копирование при помощи перенаправления вывода

Копировать содержимое каталога 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’, введите:

Источник

Как копировать файлы и каталоги в Linux

Копирование файлов и каталогов — одна из наиболее распространенных задач, которые вы будете выполнять при работе в командной строке. В Linux есть несколько команд для копирования файлов, наиболее широко используемые инструменты — cp и rsync .

Обычной практикой является использование команды cp для копирования файлов и rsync для копирования каталогов.

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

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

В операционных системах Linux и Unix команда cp используется для копирования файлов и каталогов.

Самый простой вариант использования — скопировать файл в текущий рабочий каталог. Например, чтобы скопировать файл с именем file.txt в файл с именем file_backup.txt в текущем каталоге , вы должны выполнить следующую команду:

Если целевой файл существует, он будет перезаписан. Чтобы получить запрос на подтверждение перед перезаписью файлов, используйте параметр -i .

По умолчанию при использовании команды cp для копирования файла новый файл будет принадлежать пользователю, выполняющему команду. Используйте параметр -p чтобы сохранить режим файла, владельца и временные метки :

Другой вариант, который может быть полезен, — это -v . При использовании этой опции команда печатает, что делается:

Скопируйте файл в каталог

Чтобы скопировать файл в каталог, укажите абсолютный или относительный путь к каталогу. Если целевой каталог не указан, файл копируется в текущий каталог.

В следующем примере мы file.txt файл file.txt в file.txt /backup :

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

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

Приведенная выше команда скопирует файл в указанный каталог как new_file.txt .

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

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

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

Команда cp также позволяет использовать сопоставление с образцом. Например, чтобы скопировать все файлы .png из текущего каталога в каталог /backup , вы должны использовать:

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

Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте параметр -R или -r . В следующем примере мы копируем каталог Pictures в Pictures_backup :

Читайте также:  Службе проверки подлинности не удается загрузить сведения аутентификации astra linux

Приведенная выше команда создаст каталог назначения и рекурсивно скопирует все файлы и подкаталоги из источника в каталог назначения.

Если целевой каталог уже существует, сам исходный каталог и его содержимое копируются в целевой каталог. Чтобы скопировать только файлы и подкаталоги, но не целевой каталог, используйте параметр -T :

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

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

rsync — это быстрая и универсальная утилита командной строки, которая синхронизирует файлы и каталоги между двумя местоположениями. Его можно использовать для копирования файлов в локальные и удаленные места.

rsync включает множество параметров, которые контролируют каждый аспект его поведения.

Наиболее полезная опция -a которая рекурсивно копирует каталоги, передает специальные и блочные устройства и сохраняет символические ссылки, время модификации, группу, владение и разрешения.

Чтобы скопировать один файл из одного места в другое, вы должны выполнить следующую команду:

Если целевой файл существует, rsync перезапишет его.

Эту же команду можно использовать для копирования каталога:

rsync по-разному rsync исходным каталогам, заканчивающимся косой чертой / . Если вы добавите завершающую косую черту в исходный каталог, команда скопирует только содержимое исходного каталога в целевой каталог. Если косая черта в конце опущена, rsync скопирует исходный каталог в целевой каталог. Самый безопасный вариант — всегда включать косую черту / как в месте назначения, так и в источнике.

Чтобы узнать больше о rsync прочтите следующие статьи:

Выводы

Мы показали вам, как копировать файлы и каталоги в системах на базе Linux и Unix, используя утилиты cp и rsync .

Если у вас есть вопросы, оставьте комментарий ниже.

Источник

Команда cp

Описание команды cp

Синтаксис

что_копируем — файл, несколько файлов, директория или несколько директорий, которые необходимо скопировать.

куда_копируем — название файла, в который выполняется копирование другого файла, или директория, в которую копируются исходные файлы или директории.

Опции

МЕТОД определяет, каким образом формируется имя резервной копии. МЕТОД может принимать значения:

  • none или off — не делать резервных копий, даже если включена опция —backup
  • numbered или t — имя резервной копии получит числовой индекс (пример: myfile.txt

).

  • existing или nil — если в директории уже есть резервные копии с числовыми индексами, то использовать числовые индексы для новых резервных копий, во всех остальных случаях использовать метод simple .
  • simple или never — делать обычные резервные копии (пример: myfile.txt

    Например, при использовании команды cp —parents a/b/myfile dstdir , файл myfile будет скопирован в директорию dstdir/a/b . То есть будут созданы промежуточные директории.

    КОГДА может принимать значения:
    always — всегда создавать «легкую» копию файла. Создается ссылка на исходные данные. Фактического копирования данных не происходит. Блоки данных копируются только тогда, когда они изменяются.
    auto — создается обычная полная копия.

    КОГДА может принимать значения:
    auto — (поведение по умолчанию) копировать разреженные файлы в разреженные файлы.
    always — результирующий файл всегда разреженный, если в исходном есть достаточное количество нулевых последовательностей.
    never — не делать результирующие файлы разреженными.

    Примеры использования команды cp

    Скопировать файл в другую директорию

    Скопируем файл myfile.txt в директорию mydir :

    Скопируем файл myfile1.txt в новый файл myfile2.txt

    Скопировать несколько файлов

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

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

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

    Показать информацию о копируемых файлах

    При использовании опции -v выводится информация о том, какие файлы и куда копируются.

    Скопировать директорию

    Чтобы скопировать директорию и все ее содержимое нужно использовать опцию -r

    Скопировать только если файлы новее

    Скопируем файлы вида myfile*.txt (например, это могут быть файлы myfile1.txt myfile10.txt myfile2.txt ) в директорию mydir , но если результирующий файл существует, то копирование выполняется только в том случае, если исходный файл новее.

    Не перезаписывать существующие файлы

    Чтобы существующие файлы не перезаписывались, используется опция -n

    Скопировать только атрибуты

    Скопируем только атрибуты файла. Содержимое файла не копируется.

    Создать резервную копию для результирующих файлов, если они существуют

    Скопируем файл myfile1.txt в файл myfile2.txt . Если файл myfile2.txt существует, то будет создана его резервная копия.

    Принудительно перезаписывать существующие файлы назначения

    Если файл назначения существует и не может быть открыт и удален, то можно использовать опцию -f , чтобы принудительно перезаписать такой файл:

    Источник

    Команда cp: правильное копирование папок с файлами в *nix

    В этой статье будут раскрыты некоторые неочевидные вещи связанные с использованием wildcards при копировании, неоднозначное поведение команды cp при копировании, а также способы позволяющие корректно копировать огромное количество файлов без пропусков и вылетов.

    Допустим нам нужно скопировать всё из папки /source в папку /target.

    Первое, что приходит на ум это:

    Читайте также:  To do list windows mobile

    Сразу исправим эту команду на:

    Ключ -a добавит копирование всех аттрибутов, прав и добавит рекурсию. Когда не требуется точное воспроизведение прав достаточно ключа -r .

    После копирования мы обнаружим, что скопировались не все файлы — были проигнорированы файлы начинающиеся с точки типа:

    .profile
    .local
    .mc
    и тому подобные.

    Почему же так произошло?

    Потому что wildcards обрабатывает shell ( bash в типовом случае). По умолчанию bash проигнорирует все файлы начинающиеся с точек, так как трактует их как скрытые. Чтобы избежать такого поведения нам придётся изменить поведение bash с помощью команды:

    Чтобы это изменение поведения сохранилось после перезагрузки, можно сделать файл wildcard.sh c этой командой в папке /etc/profile.d (возможно в вашем дистрибутиве иная папка).

    А если в директории-источнике нет файлов, то shell не сможет ничего подставить вместо звёздочки, и также копирование завершится с ошибкой. Против подобной ситуации есть опции failglob и nullglob . Нам потребуется выставить failglob , которая не даст команде выполниться. nullglob не подойдёт, так как она строку с wildcards не нашедшими совпадения преобразует в пустую строку (нулевой длины), что для cp вызовет ошибку.

    Однако, если в папке тысячи файлов и больше, то от подхода с использованием wildcards стоит отказаться вовсе. Дело в том, что bash разворачивает wildcards в очень длинную командную строку наподобие:

    На длину командной строки есть ограничение, которое мы можем узнать используя команду:

    Получим максимальную длину командной строки в байтах:

    Получим что-то типа:

    Итак, давайте будем обходиться вовсе без wildcards.

    Давайте просто напишем

    И тут мы столкнёмся с неоднозначностью поведения cp . Если папки /target не существует, то мы получим то, что нам нужно.

    Однако, если папка target существует, то файлы будут скопированы в папку /target/source.

    Не всегда мы можем удалить заранее папку /target, так как в ней могут быть нужные нам файлы и наша цель, допустим, дополнить файлы в /target файлами из /source.

    Если бы папки источника и приёмника назывались одинаково, например, мы копировали бы из /source в /home/source, то можно было бы использовать команду:

    И после копирования файлы в /home/source оказались бы дополненными файлами из /source.

    Такая вот логическая задачка: мы можем дополнить файлы в директории-приёмнике, если папки называются одинаково, но если они отличаются, то папка-исходник будет помещена внутрь приёмника. Как скопировать файлы из /source в /target с помощью cp без wildcards?

    Чтобы обойти это вредное ограничение мы используем неочевидное решение:

    Те кто хорошо знаком с DOS и Linux уже всё поняли: внутри каждой папки есть 2 невидимые папки «.» и «..», являющиеся псевдопапками-ссылками на текущую и вышестоящие директории.

    • При копировании cp проверяет существование и пытается создать /target/.
    • Такая директория существует и это есть /target
    • Файлы из /source скопированы в /target корректно.

    Итак, вешаем в жирную рамочку в своей памяти или на стене:

    Поведение этой команды однозначно. Всё отработает без ошибок вне зависимости от того миллион у вас файлов или их нет вовсе.

    Выводы

    Если нужно скопировать все файлы из одной папки в другую, не используем wildcards, вместо них лучше использовать cp в сочетании с точкой в конце папки-источника. Это скопирует все файлы, включая скрытые и не завалится при миллионах файлов или полном отсутствии файлов.

    Послесловие

    vmspike предложил аналогичный по результату вариант команды:

    ВНИМАНИЕ: регистр буквы T имеет значение. Если перепутать, то получите полную белиберду: направление копирования поменяется.
    Благодарности:

    Источник

    Команда cp — копирование файлов в Linux из терминала

    Задачи по копированию файлов из одного места в другое возникают у пользователей чаще всего, скопировать нужные объекты можно через менеджер файлов, в котором следует найти нужную директорию и после воспользоваться контекстным меню. Однако есть гораздо более простые способы, в этой статье речь как раз пойдет о них, точнее о копировании файлов в Линукс из консоли.

    Знание о команде cp полезны, ведь файловый менеджер может некорректно работать из-за проблем с графической оболочкой. Серверные компьютеры вообще управляются только через консоль. Перемещать файлы с помощью терминала очень удобно, в этом может убедиться каждый пользователь. Скопировать файлы можно как с помощью утилиты cp, так же используя tar и find.

    Синтаксис

    Рассмотрим синтаксис утилиты.

    cp [параметр] [что копировать] [куда купировать]

    Как только команда будет активирована, отправляемый файл перенесется в место для приема, при указании на конце файла значка «/» он также будет перенесен, но с новым именем.

    • —attributes-only – переместить не сам файл, а только данные пользователя и флаги доступа;
    • -f —force – вместо старых данных записать новые;
    • -i —interactive – спросить о необходимости переписывать старую информацию;
    • -L – создать копию не ссылок-символов, а того, что находится по этим ссылкам;
    • -n – оставить старые файлы на их месте;
    • -P – игнорировать ссылки-символы;
    • -r – скопировать данные Linux используя рекурсию;
    • -s – ничего не копировать, просто создать ссылки-символы;
    • -u – копировать файл, но при условии, что он уже был изменен;
    • -x – проводить все действия только внутри одной системы файлов;
    • -p – во время копирования сохранить все информацию о файле;
    • -t – команда дает возможность считать файл для приема директорией, и отправлять в него нужный объект;
    Читайте также:  Icsee приложение для windows

    Примеры

    Для первого примера, скопируем файл /root/katalog/dokument в папку, которая называется «newpapka».

    cp /root/katalog/dokument /root/newpapka

    Cкопируем «dokument» и «file» в каталог «newpapka».

    cp /root/katalog/dokument /root/katalog/file /root/newpapka

    Часто бывает так, когда копируешь несколько файлов, желательно выводить информацию, что происходит. В этом поможет опция «-v».

    cp -v /root/katalog/dokument /root/katalog/file /root/newpapka

    Команда cp устроена так, что все отправляемые с ее помощью файлы перезаписываются, однако программу можно заставить спрашивать пользователя о том, нужно ли перезаписывать старые данные, для этого есть специальная команда:

    cp -i /root/katalog/dokument /root/newpapka

    Существует альтернатива данной функции, благодаря запросу «-n» можно сказать программе, чтобы она вообще не перезаписывала файлы.

    Данная возможность будет полезна при следующей ситуации: пользователю известно, что в определенном месте для копирования уже содержится тот же файл, но с устаревшей версией, а с помощью функции «-u» можно безболезненно перезаписать старые данные:

    cp -u /root/katalog/dokument /root/newpapka

    Для копирование папки со всем ее содержимом необходимо использовать параметр -r.

    cp -r /root/katalog /root/newpapka

    ВАЖНО! Как видно из скриншота, данный способ скопирует всю папку и поместит ее в новую директорию.

    Если нужно только сделать копию всех файлов без папки, то опция -r не подойдет.

    Можно сделать так:

    cp /root/katalog/* /root/newpapka

    Как видно из примера выше, команда cp работает со знаками «*» и «?», следующий запрос, займется копированием всех файлов, чье название начинается с new:

    cp /root/katalog/new* /root/newpapka

    Для ввода команд быстрее есть возможность применять фигурные скобки, чтобы заиметь копию файла для резерва следует ввести данную команду:

    С ее помощью появится резервный файл, который имеет расширение, указанное в скобках.

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

    Регулярные выражения

    Для выполнения других, более сложных функций, придется использовать вместе с cp такие утилиты find и egrep.

    С помощью утилиты find есть возможность использовать команды для выявления расположения файлов. Пользователь может найти данные с использованием find, а затем скопировать их, используя функция для копирования.

    Вот пример, в нем проводится копирование файлов, которые содержат цифры от 1 до 5:

    find /root -name 2 -exec cp <> /root/newpapka \;

    ВАЖНО! Обязательно в конце команды нужно ввести «;», в противном случаи будет ошибка — exec аргумент не задан.

    • /root — каталог где производить поиск.
    • -name — критерии поиска.
    • 2 — что искать, в данном случаи от одного до пяти.
    • -exec — аргумент, который говорит, что нужно запустить команду.
    • <> — подставляет имя каждого файла.

    Сделать то же самое можно и не прибегая к find, можно обратиться к утилите ls, выбрать нужные файлы, используя регулярные выражения egrep, затем отправить их под контроль cp, применяя при этом xargs:

    ls -1 /root | egrep ‘1’ | xargs cp -t /root/newpapka

    Данный способ не отличается особым удобством, однако использовать его можно. При работе с ним начнется копирование файлов из основной директории, чьи имена содержат лишь цифры от 1 до 5.

    Копирование при помощи перенаправления вывода

    В операционной системе Linux есть специальный символ «>», который означает перенаправление вывода.

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

    Используя cat можно выводить на экран основные данные файла, а затем, используя bash, пользователь сможет переносить составляющие файла из одного места в другое.

    cat file1 > newfile

    Одной из особенностью Linux является то, что в нем одно и то же действие можно выполнять, используя несколько различных команд.

    Скопировать данные можно не только с помощью cp. Когда важные системные файлы отправляются в другое место или происходит создание резервных копий данных, нужно, чтобы такие вещи как атрибуты, владельцы данных, ссылки-символы были сохранены без каких-либо изменений.

    С помощью cp так делать можно, однако на помощь придется позвать утилиту tar, чтобы она начала работу следует написать в cp «-p».

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

    tar cf — /lfc | ( cd /epl/lfc && tar xvf — )

    С помощью данной команды все из папки /lfc отправляется в папку /epl/lfc. Таким способом можно скопировать любую информацию с компьютера, даже если это операционная система.

    Теперь почти каждый пользователь знает, как копировать файлы в ОС. С помощью терминала делать это можно быстро, главное – запомнить все нужные команды.

    Источник

  • Оцените статью