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

ПК и ноутбуки

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

Название инструмента cp является сокращением от Copy, что означает «копировать». Инструмент позволяет полностью копировать файлы и каталоги.

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

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

$ cpoptions исходный файл целевой файл

Или же:

$ cpoptions исходный файл каталог назначения/

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

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

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

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

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

сР ~/pic.png ~/картинки/

Или мы можем явно назвать новое изображение:

сР ~/pic.png ~/pictures/wallpaper.png

Папки копируются с ключом -r:

cp -R ~/папка ~/Документы/

После выполнения этой команды копирования папка ~/ будет скопирована в папку ~/Documents. Самое главное, не забудьте поставить косую черту в конце выражения или использовать опцию -t. В противном случае папка ~/documents будет перезаписана.

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

cp -i ~/тест ~/Документы/тест

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

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

cp -u ~/тест ~/Документы/тест

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

cp ~/тест* ~/Документы/

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

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

cp -p ~/тест* ~/Документы/

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

$ cp test.conf{,.back}

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

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

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

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

найти. -name 0-9 -exec cp {} ~/Документы

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

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

лс -1 ~/ | egrep ‘a-zA-Z’ | xargs cp -t ~/папка/

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

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

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

кот файл1 > файл2

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

кот файл1 файл2 > файл3

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

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

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

берет cf — /var | (cd /mnt/var && tar xvf -)

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

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

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

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

cp myfile.txt мой каталог

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

cp мой файл1.txt мой файл2.txt

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

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

cp /etc/config/myfile1.txt /home/pupkin/myfile1.txt /mnt/some/myfile3.txt мой каталог

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

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

cp -i minfile1.txt minfile2.txt cp: перезаписать ‘minfile2.txt’? у

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

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

cp -v myfile1.txt myfile2.txt mydir/ ‘myfile1.txt’ -> ‘mydir/minfile1.txt’ ‘myfile2.txt’ -> ‘mydir/minfile2.txt’

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

Чтобы скопировать каталог и все его содержимое, используйте параметр -r

cp -r /home/pupkin/mydir /mnt/usbflash

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

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

cp -u минимальный файл*.txt минимальный каталог

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

Чтобы предотвратить перезапись существующих файлов, используйте параметр -n

cp -n /home/pupkin/mydir /mnt/usbflash

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

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

cp —attributes-only minfile1.txt minfile2.txt

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

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

cp -b мой файл1.txt мой файл2.txt

Команда резервного копирования CP

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

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

cp -f myfile1.txt myfile2.txtLikes: +2 Войти НравитсяНе нравится Войти Нравится 2

  • Опубликовано: 06.08.20190

Читайте также: Моргает монитор компьютера причины windows 10 – исправляем ситуацию

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

По умолчанию команда cp перезаписывает существующие файлы. Например, давайте создадим файл a.txt с текстом A в текущем каталоге, а файл a.txt с текстом B в содержимом каталога-1 станет B, станет A).

$ cat a.txt A $ каталог cat-1/a.txt B $ cp каталог a.txt-1/a.txt $ каталог cat-1/a.txt A

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

Есть два способа предотвратить перезапись файлов.

Флаг —interactive

Вы можете добавить флаг -i (или —interactive) к команде cp, чтобы получить предупреждение, если она перезаписана):

$ cp -i Каталог a.txt-1/a.txt перезаписать каталог-1/a.txt? (г/нн)

Флаг —no-clobber

флаг -n (или —no-clobber) позволяет предотвратить перезапись по умолчанию без запроса пользователя:

$ cat a.txt A $ cat каталог-1/a.txt B $ cp -n каталог a.txt-1/a.txt $ cat каталог-1/a.txt B

В этом примере видно, что благодаря флагу -n содержимое файла directory-1/a.txt не было перезаписано.

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

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

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

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

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

rsync -a файл.txt file_backup.txt

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

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

rsync -a /var/www/public_html/ /var/www/public_html_backup/

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

Оцените статью
Интернет на телефонах
Adblock
detector