Меню Рубрики

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

Копирование файлов в 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 1 -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.

Создание текстовых файлов в терминале Linux.

Текстовый файл в терминале Linux можно создать тремя способами.

1. С помощью команды touch:

Вводим команду touch, затем путь и название нового файла.

Например, создадим текстовый файл в текущей директории с именем file.txt:

2. С помощью перенаправления стандартного потока вывода любой команды.

О перенаправлении стандартных потоках вывода в файл более подробно будет рассказано в одной из следующих статей о терминале Linux.

Создать файл можно также перенаправлением вывода любой команды в файл.

В общем виде команда будет следующей:

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

Например, перенаправим вывод справки команды ls в файл, который будет создан (а если такой файл есть, то он будет полностью перезаписан):

Но это мы создали не пустой файл, а если хотим создать пустой, то воспользуемся командой echo c переданной ей пустой строкой (две одинарных ковычки) и перенаправим это в файл:

3. С помощью любого текстового редактора, консольного или с графическим интерфейсом.

Передаем команду запуска любого текстового редактора и путь к файлу.

Самый простой консольный текстовый редактор это nano:

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

Про манипуляции с текстом более подробно в одной из следующих статей о терминале Linux.

Создание директорий (каталогов) в терминале Linux.

Создание каталогов выполняется командой “mkdir” (от англ. make directory):

Создать директорию с именем “dir1”:

Создать две директории одновременно:

Создать дерево директорий:

Удаление файлов и директорий в терминале Linux.

Удаление директорий (каталогов) в терминале Linux.

Для удаления директорий используется команда “rmdir” (от англ. remove directory):

Удаляются директории аналогично, как и создаются. Такие же команды.

Удаление файлов в терминале Linux.

Для удаления файлов используется команда “rm” (от англ. remove).

Работает очень просто, пишете команду rm и путь к файлу, который хотите удалить:

Удалить файл с именем “file1”:

Но команда “rm” позволяет удалять не только файлы, но и директории (каталоги) вместе с их содержимым.

Удалить директорию с именем “dir1” и рекурсивно всё её содержимое:

Удалить две директории и рекурсивно их содержимое:

Также можно добавить параметр -f, который означает, что при удалении не будет запрашиваться подтверждение на удаление. Команды будут выглядеть так:

Перемещение и переименование файлов и директорий в терминале Linux.

Для перемещения и переименовывания файлов и директорий (каталогов) используется команда “mv” (от англ. move).

Всё очень просто. Чтобы переименовать файл, выполняем команду:

Чтобы переместить файл:

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

Для копирования используется команда “cp” (от англ. copy).

Скопировать файл file1 и назвать его file2:

Копировать директорию dir1 в директорию dir2:

Копировать файл с именем file1 в директорию c именем dir1:

Справка о командах.

У каждой команды присутствует множество параметров, чтобы узнать их, просто наберите команду и параметр –help:

Источник


Adblock
detector