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

Обновлено: 25.11.2024

Хотите сохранить права доступа к файлам при копировании файлов в Linux? Вот как это сделать с помощью cp и rsync.

Разрешения на доступ к файлам являются неотъемлемой частью спецификации Unix. Однако есть некоторые вещи, о которых начинающие пользователи часто не знают, например, как сохранить права доступа к файлам в Linux при их копировании.

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

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

Сохранить права доступа к файлам с помощью cp

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

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

Вы также можете использовать параметр -a команды cp, чтобы сохранить права доступа к файлам. Это включает режим архива, сохраняя все, от прав доступа к файлам до контекстов SELinux.

Сохранение разрешений в Linux с помощью rsync

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

Опция -a rsync включает режим архива, в котором сохраняются такие атрибуты файла, как разрешения и права собственности. Вы можете использовать опцию -v для подробного вывода и -h для просмотра чисел в удобочитаемом формате.

Также обратите внимание на исключение косой черты в конце (/) из каталога назначения. Добавление завершающей косой черты к месту назначения приведет к тому, что rsync скопирует файлы в другой уровень подкаталога.

Проверка прав доступа к файлам в Linux

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

Копирование файлов с сохранением разрешений в Linux

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

Несмотря на то, что rsync может копировать файлы между удаленными компьютерами, команда scp (защищенное копирование) является еще одним подходящим вариантом для этой задачи. Вы можете безопасно создавать резервные копии файлов в сетевых системах и из них с помощью scp.

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

Подпишитесь на нашу рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Мохаммед Абубакар

Мохаммед Абубакар
Писатель

Абубакар — независимый автор How-to Geek. Хотя он имеет степень в области компьютерных наук, он выбрал писательскую карьеру, чтобы помогать людям с технологиями. У него есть двухлетний опыт написания статей о бытовой электронике, Android, Linux, Windows и программном обеспечении с открытым исходным кодом на таких сайтах, как Fossbytes. Подробнее.

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

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

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

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

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

Рассмотрите синтаксис cp в его простейшей форме.

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

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

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

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

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

Учитывая наличие файла Test1.txt, который необходимо скопировать в каталог copy_Test1_here как Test2.txt:

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

Хотите скопировать весь каталог? Предположим, что dir_1 и dir_2 — это два каталога в /Desktop. Чтобы скопировать dir_1 в dir_2 с помощью команды cp, вам нужно ввести вот что.

Здесь параметр -a означает «архив» и используется, чтобы сообщить компьютеру, что мы имеем дело с каталогами. Команда копирует каталог dir_1 в dir_2 .

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

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

Вывод будет выглядеть следующим образом:

Использование команды Rsync

Команда rsync означает «Удаленная синхронизация» и в основном используется для передачи файлов и каталогов между компьютерами в одной сети. Однако он также позволяет копировать файлы и каталоги на один и тот же компьютер. Вот несколько примеров.

Учитывая, что у нас есть два каталога dir_1 , dir_2 и файл Test.txt в dir_1 . Если мы хотим скопировать файл в dir_2 , вот как будет выглядеть команда rsync, чтобы сделать то же самое.

Здесь -v означает "подробный". Это приводит к отображению сведений о передаче файла, подобно опции -v в команде cp. Это позволяет подтвердить, что копирование прошло успешно. Вот что получится в нашем случае:

Вы также можете копировать сразу несколько файлов из одного каталога в другой. Предположим, что вы находитесь в /Desktop, в котором есть два каталога dir_1 и dir_2. В dir_1 есть четыре файла test1, test2, test3 и test4, и вы хотите скопировать их в dir_2. Вот как это можно сделать с помощью rsync :

Приведенная выше команда скопирует файлы test1 , test2 , test3 и test4 в каталог dir_2 .

Чтобы скопировать один каталог в другой, мы должны использовать параметр -a. Вот пример того, как копировать каталоги с помощью Rsync.

Если вы новичок в Linux и команды кажутся сложными для понимания, не торопитесь и сначала ознакомьтесь с основными командами Linux. Вы также можете многое узнать о командах, используя команду man.

Помимо rsync и cp, команда install также позволяет копировать файлы в Linux.

  • › Почему не было Windows 9?
  • › Как восстановить метки панели задач в Windows 11
  • › Почему прозрачные чехлы для телефонов желтеют?
  • › Как установить Google Play Маркет в Windows 11
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
  • › Что означает XD и как вы его используете?

Раньше для копирования документов требовался специальный сотрудник в офисе, а затем и специальный компьютер.Сегодня копирование — это задача, которую пользователи компьютеров выполняют без задней мысли. Копирование данных на компьютер настолько тривиально, что копии создаются без вашего ведома, например, при перетаскивании файла на внешний диск.

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

Вот несколько способов копирования файлов в Linux, BSD и Mac.

Копирование в графическом интерфейсе

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

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

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

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

Щелкните правой кнопкой мыши

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

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

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

Копирование в командной строке

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

Очевидным терминальным эквивалентом копирования и вставки файла на рабочий стол является команда cp. Эта команда копирует файлы и каталоги и относительно проста. Он использует знакомый синтаксис исходного и целевого (строго в таком порядке), поэтому, чтобы скопировать файл с именем example.txt в папку «Документы»:

Как и при перетаскивании файла в папку, это действие не заменяет Документы на example.txt. Вместо этого cp определяет, что Documents — это папка, и помещает в нее копию файла example.txt.

Вы также можете удобно (и эффективно) переименовывать файл при его копировании:

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

Чтобы скопировать каталог, вы должны использовать параметр -r, который означает --recursive. Эта опция запускает cp для каталога inode, а затем для всех файлов в этом каталоге. Без опции -r cp даже не распознает каталог как объект, который можно скопировать:

Команда cat — одна из самых неправильно понятых команд, но только потому, что она демонстрирует исключительную гибкость системы POSIX. Помимо всего остального, что делает cat (включая его предполагаемую цель объединения файлов), он также может копировать. Например, с помощью cat вы можете создать две копии одного файла с помощью всего одной команды. Вы не можете сделать это с помощью cp.

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

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

Запустите umask, чтобы получить текущие настройки:

Этот параметр означает, что новым файлам, созданным в этом месте, предоставляется разрешение 664 (rw-rw-r--), поскольку ничто не маскируется первыми цифрами параметра umask (и бит исполняемого файла не является битом по умолчанию для файла создание), а разрешение на запись блокируется последней цифрой.

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

Как видите, cat создал совершенно новый файл с примененным системным umask по умолчанию.

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

синхронизация

Команда rsync – это универсальный инструмент для копирования файлов с замечательной способностью синхронизировать источник и место назначения. В самом простом случае rsync можно использовать аналогично команде cp:

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

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

Вы можете намеренно сымитировать эту ситуацию, создав две папки, одну с именем example, а другую с именем example_dupe:

Создайте файл в первой папке:

Используйте rsync для синхронизации двух каталогов. Наиболее распространенными параметрами для этой операции являются -a (для архивирования, обеспечивающего сохранение символических ссылок и других специальных файлов) и -v (для подробных, предоставляющих вам обратную связь по ход выполнения команды):

Каталоги теперь содержат ту же информацию:

Если файл, который вы рассматриваете как исходный, отличается, цель обновляется, чтобы соответствовать:

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

Если изменений нет, копирование не происходит.

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

Много способов копирования

Существует множество способов добиться по существу того же результата в системе POSIX, поэтому кажется, что репутация гибкости с открытым исходным кодом заслужена. Я пропустил полезный способ копирования данных? Поделитесь своими копирайтингами в комментариях.

Мой внешний жесткий диск в беспорядке. Да, потому что я сбросил все файлы в один каталог. Мне просто было лень расставлять файлы и папки в правильном порядке. Мне потребовалось больше времени, когда я искал конкретный файл. Итак, я подумал, что будет намного лучше, если я организую файлы определенного типа в отдельных каталогах. Я решил создать папки для каждого типа файлов и хранить файлы в соответствующих папках. Скажем, например, все медиафайлы (аудио и видео) должны находиться в каталоге Multimedia, файлы изображений — в папке Pictures, а официальные связанные материалы — в папке ostechnix.

Однако поиск и копирование файлов каждого конкретного типа вручную — утомительная и трудоемкая задача. Поиск и копирование всех файлов займет несколько часов, если у вас их большое количество. Итак, я сделал быстрый поиск в Google и нашел подходящее решение. Если вы когда-нибудь хотели скопировать файлы определенного типа из одного каталога в другой в Unix-подобных операционных системах, вот один из способов сделать это. Это можно сделать разными способами, но я обнаружил, что следующий метод легко и просто использовать.

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

Мы собираемся использовать команду «найти», чтобы упорядочить файлы. Команда find предустановлена ​​в большинстве Unix-подобных дистрибутивов, так что не будем ее устанавливать. В этом руководстве я покажу, как быстро найти и скопировать mp3-файлы из каталога с именем test1 в другой каталог с именем test2.

Проверим содержимое тестового каталога.

Пример вывода:

Как видно из приведенного выше результата, в каталоге test1 есть три файла mp3. Давайте скопируем эти mp3-файлы в каталог test2. Для этого перейдите в каталог test1 с помощью команды:

Затем выполните следующую команду, чтобы найти и скопировать все файлы с расширением .mp3.

Давайте разберем приведенную выше команду и посмотрим, что делает каждый параметр.

  • find — это команда для поиска файлов и папок в Unix-подобных системах.
  • -iname '*.mp3' — поиск файлов с расширением .mp3.
  • -exec cp — указывает вам выполнить команду «cp» для копирования файлов из исходного каталога в целевой.
  • <> - автоматически заменяется именем файла, найденного командой 'find'.
  • /home/sk/test2/ – целевой каталог для сохранения соответствующих файлов.
  • \; - Указывает на то, что команды, которые должны быть выполнены, теперь завершены, и выполнить команду снова при следующем совпадении.

Очистить? Хорошо! Теперь давайте проверим каталог test2, чтобы убедиться, что файлы были скопированы правильно.

Пример вывода:

Как видите, все файлы с расширением .mp3 были скопированы из каталога test1 в каталог test2. Точно так же вы можете копировать файлы других типов в другие каталоги по вашему выбору, как описано выше.

Приведенная выше команда скопирует все файлы *.mp3 из исходного каталога и его подкаталогов. Если вы не хотите этого делать, используйте флаг -maxdepth. Например, следующая команда скопирует все файлы .mp3 только из исходного каталога, но не из его подкаталогов.

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

Похожее чтение:

Подробнее см. справочные страницы.

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

Читайте также: