Копирование файлов в терминале
Копирование содержимого одного каталога в другой - очень простая задача. Однако у вас есть множество вариантов сделать это. Linux наделен многочисленными инструментами для управления файлами и каталогами с помощью различных действий.
Все шаги демонстрируются на Ubuntu 18.04.1. Сначала давайте создадим несколько фиктивных файлов для работы.
$mkdir -vdir_A
Теперь давайте создадим фиктивные файлы с помощью сенсорного ввода.
$трогатьдурачок{1..10}
Давайте создадим еще одну папку в dir_A с несколькими фиктивными файлами.
$mkdir -vdir_B
$трогатьдурачок{1..10}
Теперь вся структура каталога dir_A выглядит так.
$деревоdir_A
Команда Cp
В cp На сегодняшний день это самый распространенный инструмент для копирования файлов. Это инструмент, который по умолчанию входит в состав любой системы Linux. Копирование файлов и каталогов - единственная цель cp. Он поддерживает широкий спектр функций.
Это основная структура cp команда.
$cp <параметры> <источник> <место назначения>Например, давайте сделаем копию манекен1 файл с именем dummy1_copy .
$cpdummy1 dummy1_copy
Теперь давайте попробуем скопировать сразу несколько файлов. Для такой операции cp требует, чтобы местом назначения был каталог. Здесь я буду использовать выражение с подстановочными знаками, чтобы получить все дурачок файлы и поместите их в ~ / Загрузки каталог.
$cpдурачок*~/Загрузки
Как насчет копирования каталога?
$cp -vrdir_A dir_A_copy
Здесь мы использовали два разных флага. Давайте быстро их разберем.
- -r: заменяет a рекурсивный копия (включая любые скрытые файлы). Обязательно наличие флага, если копирование затрагивает весь каталог или более.
- -v: означает подробный . Инструмент cp будет выводить каждое выполняемое действие.
Хотите перейти по символическим ссылкам? Добавьте флаг -L.
$cp -Lvr <источник> <место назначения>Допустим, в целевом каталоге уже есть файл с таким именем. Если вы хотите избежать перезаписи, используйте флаг -n. Это гарантирует, что в случае конфликта cp не перезапишет файл.
$cp -nv <источник> <место назначения>Если вы выполняете деликатное копирование / вставку, лучше иметь лучший контроль над тем, что происходит, верно? В таком случае используйте флаг -i. Это означает интерактивный режим, в котором cp будет запрашивать подтверждение каждый раз, когда возникает конфликт.
$cp -я <источник> <место назначения>
Если вам интересно, справочная страница всегда является одной из лучших документации. Узнать больше о cp.
$человек cp
команда mv
Инструмент mv похож на инструмент cp. Однако вместо копирования mv перемещает файлы и каталоги. По сравнению с cp это проще.
Командная структура mv аналогична cp.
$мв <вариант> <источник> <место назначения>Чтобы переместить содержимое dir_A к dir_A_copy выполните следующую команду.
$мв -vdir_A/dir_A_copy
Здесь флаг -v предназначен для подробный режим. Если вы хотите переместить только содержимое dir_A, используйте вместо этого следующий. В этом случае целевой каталог должен существовать заранее.
$мв -vdir_A/ *dir_A_copy
У инструмента mv особо не с чем работать. Чтобы узнать обо всех доступных параметрах, посетите страницу руководства.
$человек мв
Команда Rsync
Это один из самых популярных и мощных инструментов для копирования файлов, который в основном используется для резервного копирования. Он позволяет копировать файлы через удаленное соединение. В отличие от cp и mv, он также поставляется с множеством расширенных параметров копирования файлов, которые предлагают максимальную настройку его поведения.
Rsync в основном известен своим алгоритмом дельта-передачи, который значительно сокращает объем данных, которыми необходимо обмениваться. В случае удаленной синхронизации это значительно экономит пропускную способность.
Rsync обычно не входит в предустановленный дистрибутив Linux. Однако из-за своей популярности теперь он доступен во всех основных дистрибутивах Linux. Использовать Pkgs.org чтобы найти пакет rsync для вашего дистрибутива. Предполагая, что у вас установлен rsync, приступим.
Во-первых, основная структура команд rsync. Это очень похоже на cp.
$rsync<параметры> <источник> <место назначения>Прежде чем начать, вот несколько популярных аргументов rsync.
- -v : Подробный режим, выводит все действия, выполняемые на экране консоли.
- -vv : Подробный режим с более подробной информацией
- -р : Рекурсивный режим, должен присутствовать при копировании каталогов
- -С участием : Сжать данные
- -к : Архивные данные
- -n : Пробный запуск, следует запускать в сочетании с подробным режимом. Просто выводит действия, если команда должна была запускаться по-настоящему
- -удалять : Удалить файл (ы) и каталог (ы) в целевом каталоге, если исходный каталог больше не содержит их.
- -нет-весь-файл : Заставляет rsync использовать свой алгоритм дельта-передачи, несмотря ни на что. Полезно в сценариях, где необходимо обеспечить минимальный объем записи данных.
- –Remove-исходный файл : Удалить исходный файл (ы) после копирования.
Давайте посмотрим на них в действии. Сначала копия каталога. Выполните следующую команду.
$rsync-vrdir_A/dir_A_copy
Для дальнейшего подробного вывода воспользуемся флагом -vv.
$rsync-vv -рdir_A/dir_A_copy
А теперь давайте посмотрим на интересную часть rsync. Мы обсудили, как rsync интеллектуально копирует только измененные файлы, экономя полосу пропускания и запись на диск. Пришло время проверить это в действии. В этом примере действие будет выполняться в пределах dir_A каталог.
$rsync-vv --no-целый файлдурачок*dir_B/
Несмотря на то, что дельта-передача включена, rsync может не применять ее, когда вы выполняете локальную передачу данных.
Теперь давайте посмотрим на функцию пробного прогона. Прежде чем запускать любую команду rsync по-настоящему, всегда важно ее предварительно протестировать. Вот тут-то и начинается пробный прогон. Rsync выведет, что произойдет, если команда действительно будет запущена.
$rsync-anvrdir_A/dir_A_copy
Rsync также может работать с удаленными каталогами, без проблем. Все, что ему нужно, это правильное соединение SSH с настроенными ключами SSH.
$ rsync<вариант> <local_dir><имя пользователя> @<удаленный узел>:<destination_dir>
Хотите выполнить операцию перемещения? Чтобы представить это с точки зрения rsync, rsync скопирует содержимое исходного каталога, а затем удалит исходное содержимое.
$rsync-v --remove-исходные файлы <источник> <место назначения>
Проверьте результат операции.
$деревоdir_A$деревоdir_A_copy
Последние мысли
Cp и rsync - наиболее распространенные инструменты, которые вы можете использовать для копирования файлов в папку на терминале Linux. Оба они также хороши для написания сценариев. Просто не забудьте протестировать функции перед реализацией.
Наслаждаться!