Меню Рубрики

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

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

Команду то я нашёл. Но мне не понятно откуда взялся синтаксис /. ? Это что то вроде регулярного выражения? В мануале информации нет. Спасибо.

1 ответ 1

Каждый каталог содержит в себе два обязательных элемента:

  • псевдокаталог .. , обозначающий каталог выше по дереву директорий (даже в / есть /.. , но обозначает всё так же / )
  • псевдокаталог . , обозначающий самого себя. Например, используется в командах для обозначения пути от текущего каталога: ./configure вызывающий скрипт configure в текущей директории.

Таким образом, в команде cp -r dir1/. dir2 аргумент dir/. является просто необычной записью cp -r dir1 dir2 . Можно писать и как-то экзотично:

Однако поведение cp неожиданно отличается в случае если dir2 уже существует, а не будет создан командой cp .

Для существующего dir2 создаст копию директории dir1 в dir2/dir1 вместо копирования содержимого dir1 в dir2 .

Именно будет копировать содержимое dir1 в dir2 .

Это неочевидная особенность реализации именно cp . Например, rsync такими странными вещами не занимается и следующие записи эквивалентны:

(но rsync при этом будет различаться поведением для записи dir2/ и dir2 для существующей директории, лучше указывать как подсказывает автокомплит, оканчивая путь / )

Источник

Копирование файлов в Linux

Копирование файлов — одна из задач, наиболее часто возникающих перед пользователями персонального компьютера. Конечно, можно открыть файловый менеджер, войти в нужную папку и скопировать файл с помощью контекстного меню — тут не о чем говорить. Но в этой статье я хотел бы рассмотреть копирование файлов в Linux с помощью терминала.

Не всегда есть доступ к файловому менеджеру: из-за различных поломок графическая оболочка на домашнем компьютере может быть недоступна, а на серверах используется только консольный интерфейс. К тому же копирование файлов Ubuntu через терминал намного эффективнее, и вы сами в этом убедитесь. Сегодня мы рассмотрим не только обычное копирование командой cp Linux, но и не совсем обычное: с помощью tar и find.

Утилита копирования файлов cp

Название утилиты cp — это сокращение от Copy, что означает копировать. Утилита позволяет полностью копировать файлы и директории.

Синтаксис и опции

Общий синтаксис cp выглядит вот так:

$ cp опции файл-источник файл-приемник

$ cp опции файл-источник директория-приемник/

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

Утилита имеет несколько интересных опций, которые могут сильно помочь при нестандартных задачах копирования, поэтому давайте их рассмотрим:

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

Примеры копирования файлов в linux

Теперь, когда вы знаете основные опции, можно перейти к практике. Например, мы хотим скопировать некую картинку из домашней папки в подкаталог pictures:

Или можем явно указать имя новой картинки:

Копирование папок осуществляется с помощью ключа -r:

После выполнения этой команды копирования

/папка будет скопирована в папку

/Документы. Главное, не забывайте поставить слэш в конце выражения или использовать опцию -t. Иначе папка

/документы будет перезаписана.

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

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

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

Сp также поддерживает специальные символы замены * и ?. Например, следующая команда скопирует все файлы, начинающиеся на test:

Если нужно применить более сложные регулярные выражения, придётся комбинировать утилиту cp с find или egrep.

В случае, если важно сохранить права доступа к файлу и его владельца, нужно использовать опцию -p:

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

Будет создан файл с таким же именем и расширением .bak

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

Копирование файлов по регулярным выражениям в Linux

В утилите find можно применять различные условия и регулярные выражения для поиска файлов. Я уже немного писал о ней в статье как найти новые файлы в Linux. Мы можем скопировать все найденные с помощью find файлы, вызвав для каждого из них команду cp. Например, копируем все файлы в текущей директории, содержащие в имени только цифры:

find . -name 5 -exec cp <>

Здесь точка указывает на текущую директорию, а параметр name задает регулярное выражение. Параметром exec мы задаем, какую команду нужно выполнить для обнаруженных файлов. Символ <> — подставляет имя каждого файла.

Но не find‘ом единым такое делается. То же самое можно получить, запросив список файлов директории в ls, отфильтровав его по регулярному выражению egrep и передав имена файлов по очереди в cp с помощью xargs:

/ | egrep ‘[a-zA-Z]’ | xargs cp -t

Это не совсем удобный способ копировать файлы Linux, но всё же он возможен. Будут скопированы все файлы из домашней директории, содержащие в имени только английские буквы.

Копирование содержимого файлов в Linux

Вы можете не только копировать сами файлы, но и управлять их содержимым. Например, склеить несколько файлов в один или разрезать файл на несколько частей. Утилита cat используется для вывода содержимого файла, в комбинации с операторами перенаправления вывода Bash вы можете выполнять копирование содержимого файла Linux в другой файл. Например:

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

cat файл1 файл2 > файл3

Специальное копирование файлов в Linux с помощью tar

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

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

tar cf — /var | ( cd /mnt/var && tar xvf — )

Здесь мы полностью копируем содержимое папки /var в папку /mnt/var. Так вы можете копировать папку Linux, причём абсолютно любую или даже целую операционную систему.

Выводы

Теперь вы знаете, как выполняется копирование файлов Ubuntu и в Linux в целом. Как видите, в терминале это выполняется намного быстрее и эффективнее, чем с помощью графического интерфейса, если помнить нужные команды. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

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

Когда вам нужно скопировать содержимое одного каталога в другой, в случае c Linux, в вашем распоряжении множество инструментов. Какой использовать? Это зависит от ситуации и личных предпочтений. В этой статье мы рассмотрим способы копирования содержимого файла из одной папки в другую через терминал. Они будут включать некоторые из популярных вариантов для различных ситуаций.

Копирование файлов в терминале

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

Все шаги продемонстрированы на Ubuntu 18.04.1. Сначала давайте создадим несколько фиктивных файлов для работы.

Теперь давайте создадим фиктивные файлы, используя touch.

Давайте создадим еще одну папку в dir_A с несколькими пустыми файлами.

Теперь вся структура каталога dir_A выглядит следующим образом.

Команда CP

Команда cp, безусловно, является наиболее распространенным инструментом для копирования файлов. Это инструмент, который поставляется по умолчанию с любой системой Linux. Копирование файлов и каталогов является единственной функцией cp. Команда поддерживает широкий спектр функций.

Это базовая структура команды cp.

Например, давайте сделаем копию файла dummy1 с именем dummy1_copy .

$ cp dummy1 dummy1_copy

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

Как насчет копирования каталога?

Здесь мы использовали два разных флага. Давайте быстро разберемся с ними.

  • -r: обозначает recursive копию (включая любые скрытые файлы), если копирование включает в себя весь каталог или более.
  • -v: расшифровывается как verbose . Инструмент cp будет выводить каждое действие, которое он выполняет.

Хотите перейти по символическим ссылкам? Добавьте флаг -L.

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

Если вы выполняете конфиденциальное действие копирования/вставки, лучше иметь хороший контроль над тем, что происходит, верно? В таком случае используйте флаг -i. Он обозначает интерактивный режим, в котором cp будет запрашивать подтверждение каждый раз, когда возникает конфликт.

Команда MV

Инструмент mv похож на cp. Однако вместо копирования mv перемещает файлы и каталоги. По сравнению с cp эта команда проще.

Структура команд mv похожа на cp.

Чтобы переместить содержимое dir_A в dir_A_copy , выполните следующую команду.

Здесь флаг -v предназначен для подробного режима. Если вы хотите переместить только содержимое dir_A , используйте следующее. В этом случае целевой каталог должен существовать заранее.

У инструмента mv не так много действий. Для всех доступных вариантов, проверьте страницу справки.

Команда Rsync

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

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

rsync обычно не предустановлен ни в одном дистрибутиве Linux. Тем не менее, благодаря его популярности, он теперь доступен на всех основных дистрибутивах Linux. Используйте Pkgs.org , чтобы найти пакет rsync для вашего дистрибутива. Предполагая, что вы установили rsync, давайте начнем.

Во-первых, базовая структура команд rsync, очень похоже на cp.

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

  • -v : подробный режим, выводит любое действие, выполняемое на экране консоли.
  • -vv : подробный режим с более подробной информацией
  • -r : рекурсивный режим, должен присутствовать при копировании каталогов
  • -z : сжать данные
  • -a : архив данных
  • -n : пробный прогон, должен запускаться в сочетании с подробным режимом. Просто выводит действия, если команда должна была выполняться по-настоящему
  • –delete : Удалить файл(ы) и каталог(и) в целевом каталоге, если исходный каталог их больше не содержит
  • -no-whole-file : заставляет rsync использовать алгоритм дельта-передачи, несмотря ни на что. Полезно в сценариях, где вы должны обеспечить наименьшее количество записи данных.
  • –remove-source-file : удалить исходные файлы после копирования.

Давайте проверим их в действии. Во-первых, каталог копирования. Запустите следующую команду.

Для дальнейшего подробного вывода давайте используем флаг -vv.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Скопировать несколько файлов linux
  • Сколько ядер у процессора linux
  • Сколько стоят таблетки linux
  • Сколько стоит linux операционная система
  • Сколько стоит linux red hat