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

Содержание

Копирование файлов — одна из задач, наиболее часто возникающих перед пользователями персонального компьютера. Конечно, можно открыть файловый менеджер, войти в нужную папку и скопировать файл с помощью контекстного меню — тут не о чем говорить. Но в этой статье я хотел бы рассмотреть копирование файлов в 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 [0-9] -exec cp <>

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

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

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

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

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

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

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

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

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

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

Например представьте, что вы имеете следующую структуру папок:

Если вы хотите скопировать file_one из текущего местоположения в / home/ documents / folder_one в / home/ documents / folder_two, то вы должны ввести следующую команду в командной строке:

Есть некоторые ярлыки вы можете сделать здесь.

/ Главная часть может быть заменена на тильду (

), что объясняется в этой статье. Это изменяет команду на эту

Вы можете просто опустить имя файла для цели, если вы собираетесь использовать то же имя файла

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

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

Читайте также:  Как оплачивать через paypal без карты

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

В предыдущем разделе folder_one содержит файл с именем file_one и folder_two не делает. Представьте себе, что folder_two имеет файл с именем file_one и вы запустили следующую команду:

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

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

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

) в конце, которая является резервной копией оригинального файла.

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

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

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

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

Для этого используйте следующий синтаксис:

Сообщение будет выглядеть следующим образом : cp: overwrite ‘./file1’?

Для перезаписи файла нажмите Y на клавиатуре или для отмены нажмите N или CTRL и C одновременно.

Что происходит при копировании символьных ссылок в Linux

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

Представьте себе, вы имеете следующую структуру папок:

  • home
  • andreyex
  • documents
  • folder_one
  • file_one
  • folder_two
    • file_one (symbolic links points to folder_one/file_one)
    • folder3
    • Посмотрите на следующую команду:

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

      Что происходит, однако, если скопировать символическую ссылку из folder_two в folder3?

      Файл, который копируется в folder3 не будет символической ссылкой. Это на самом деле файл, на который указывает символическая ссылка, так на самом деле вы получите тот же результат, как если бы путем копирования file_one из folder_one.

      Кстати вы можете получить тот же результат с помощью следующей команды:

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

      Если вы хотите скопировать символическую ссылку необходимо указать следующую команду:

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

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

      В чем разница между символической ссылкой и жесткой связи?

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

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

      Это руководство расскажет вам все, что вам нужно знать о жестких ссылках .

      Вы можете создать жесткую ссылку с помощью команды ср.

      В качестве примера того, почему вы могли бы использовать жесткую ссылку учесть, что у вас есть папка под названием видео и в этой папке видео у вас есть действительно большой видео файл с именем honeymoon_video.mp4. Теперь представьте, что вы также хотите, чтобы видео быть известным как barbados_video.mp4, потому что он также имеет кадры Барбадоса.

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

      Вы могли бы вместо того, чтобы создать символическую ссылку с именем barbados_video.mp4, которая указывает на файл honeymoon_video.mp4. Это будет работать хорошо, но если кто-то удалил honeymoon_video.mp4 вы остались бы со ссылкой и ничего другого и связь по-прежнему занимает дисковое пространство.

      Единственное отличие состоит в том, что они содержат разное количество индексных дескрипторов. (уникальные идентификаторы). Удаление файла honeymoon_video.mp4 не удаляет файл, но только снижает количество для этого файла на 1. Файл будет удален только если все ссылки на этот файл будут удалены.

      Читайте также:  Как добавить приложение в яндекс браузер

      Чтобы создать ссылку вы могли бы сделать что-то вроде этого:

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

      Если вы хотите создать символическую ссылку вместо жесткой ссылки вы можете использовать следующую команду:

      Опять же я бы лично вообще используют команду ln -s, но вместо этого работает хорошо.

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

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

      Стоит отметить, что если файл не существует на целевой стороне, то копия будет иметь место.

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

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

      Приведенная выше команда будет копировать file_one, file_two и file_three в целевую папку.

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

      Приведенная выше команда будет копировать все файлы с расширением .mp3 в папку music2.

      Как скопировать папки

      Копирование папок такое же, как копирование файлов.

      Например представьте, что вы имеете следующую структуру папок:

      Представьте, что вы хотите переместить папку folder_one в папку folder_two следующим образом:

      Вы можете использовать следующую команду:

      Кроме того, можно использовать следующую команду:

      Это копирует содержимое folder_one, а также любые суб-каталоги и файлы в пределах подкаталогов.

      Резюме

      Это руководство дало вам инструменты требующиеся для копирования файлов в Linux. Для всего остального вы можете использовать команду Linux man.

      Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

      Да это же просто, скажете Вы, но на этот комментарий есть несколько вариантов, которые могут быть достаточно не тривиальными, на вскидку — скопировать папку за исключением какого-то типа файлов или скопировать папку + сохранить настройки разрешений или скопировать из папки файлы только определенного типа.

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

      Команда CP

      Здесь все просто есть команда cp , параметры и аргументы, если кратко:

      Понятно, что ряд файлов копируется в папку с именем "Destination".

      Копирование каталогов

      Так как каталог содержит файлы, то нужно использовать рекурсивное копирование:

      Копирование с заменой / без замены

      Достаточно пустить через пайп:

      Или через force :

      Без замены (предотвратить замену) можно использовать параметр -n :

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

      Достаточно выбрать файлы по расширению:

      Можно во всех случаях использовать verbose :

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

      • cp -a archive files
      • cp -f force copy by removing the destination file if needed
      • cp -i interactive — ask before overwrite
      • cp -l link files instead of copy
      • cp -L follow symbolic links
      • cp -n no file overwrite
      • cp -R recursive copy (including hidden files)
      • cp -u update — copy when source is newer than dest
      • cp -v verbose — print informative messages

      Но вопросы про разрешения и исключение файлов остаются открытыми, здесь придет на помощь rsync.

      Копировать каталоги за исключением

      Каждое исключение — отдельный параметр, например так:

      Копировать каталоги сохранив разрешения

      Здесь все просто, достаточно добавить параметр -p :

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

      Копирование с использованием FIND

      Можно найти нужные файлы и скопировать их "куда надо":

      Поиск и копирование старых файлов

      Например сроком жизни более месяца:

      Памятка по Find

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

      Но в целом подходит конструкция указанная выше:

      Adblock
      detector