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

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


В этой статье представлено несколько способов копирования нескольких каталогов с помощью одной команды в Unix-подобных системах. Мы рассмотрим простые способы копирования с помощью команды cp, более гибкие способы с использованием циклов командной строки и продвинутые способы с использованием rsync. Каждый из них обладает множеством преимуществ - от простоты до улучшения функциональности и производительности. Это позволяет вам выбрать оптимальное решение для ваших конкретных потребностей и, таким образом, точно выполнять задачи, связанные с управлением файлами. Когда у вас есть возможность копировать сотни каталогов одной командой, это очень большое преимущество для человека, которому приходится работать с огромными объемами данных, или для людей со сложной структурой каталогов. Это руководство содержит пошаговые инструкции, практические примеры и ответы на распространенные вопросы, которые помогут вам освоить этот важный аспект управления файлами.

Основные термины

  • Интерфейс командной строки (CLI): CLI, сокращение от «Интерфейс командной строки», представляет собой текстовый интерфейс, используемый для взаимодействия с операционной системой.
  • Каталог : Каталог. В файловой системе каталог — это папка, содержащая файлы или другие каталоги. Каталоги позволяют организовывать файлы в древовидную структуру.
  • Копировать (cp): эта команда используется для копирования файлов и каталогов из одного места в другое в Unix-подобных операционных системах. Параметр -r или –recursive Копирует каталоги рекурсивно вместе со всеми файлами и подкаталогами.
  • Подстановочный знак : специальные символы * и ? используются в именах файлов и каталогах для обозначения нуля или нескольких символов. Подстановочные знаки упрощают описание нескольких файлов или каталогов.
  • Рекурсивное копирование: это процесс копирования всех файлов и подкаталогов из заданного каталога вместе со структурой каталогов.
  • Shell Script : это сценарий, который запускается оболочкой или интерпретатором командной строки операционной системы. Сценарий оболочки помогает автоматизировать набор повторяющихся работ, записывая базовую команду только один раз.
  • Для цикла : в сценарии оболочки это оператор потока управления, который помогает многократно выполнять код в зависимости от заданного условия. Таким образом, что касается копирования в каталогах, цикл for может проходить по списку каталогов и один за другим копировать их все.
  • rsync : утилита командной строки, которая реплицирует и синхронизирует файлы и каталоги между двумя расположениями. Он очень мощный и эффективен при отправке только измененных частей файла.
  • Путь : это уникальный адрес, присвоенный файлу или каталогу в файловой системе. Абсолютный путь — это путь, который указывает полное местоположение каталога, начиная с корневого каталога. С другой стороны, относительный путь указывает местоположение относительно рабочего каталога.
  • Каталог назначения : целевой каталог, в который копируются файлы или каталоги. Это конечное место для скопированных данных.

Способ 1: использование команды cp с подстановочными знаками

Шаг 1: Откройте терминал

  • Запустите приложение терминала в вашей Unix-подобной операционной системе.

Шаг 2. Перейдите в домашний каталог.

  • Используйте команду cd, чтобы изменить каталог на родительский каталог, содержащий каталоги, которые вы хотите скопировать.
cd /path/to/directory

cd /путь/к/каталогуШаг 3. Скопируйте несколько каталогов, используя подстановочные знаки

  • Используйте команду cp с опцией -r (рекурсивный) и подстановочными знаками (*), чтобы скопировать несколько каталогов.
cp -r dir1 dir2 dir3 /path/to/destination/
  • Замените dir1, dir2, dir3 фактическими именами каталогов, которые вы хотите скопировать. Настройте /path/to/destination/ на целевой каталог, в который вы хотите скопировать эти каталоги.
  • cp -r каталог1 каталог2 каталог3 /путь/к/назначения/Здесь мы видим, что dir1, dir2 и dir3 были скопированы из домашнего каталога в My_directory.

Скриншот-2024-07-13-112607Метод 2: использование цикла For в сценарии оболочки

Шаг 1. Перейдите в домашний каталог.

  • Используйте команду cd, чтобы изменить каталог на родительский каталог, содержащий каталоги, которые вы хотите скопировать.
cd /path/to/parent-directory

Шаг 2. Создайте сценарий оболочки

  • Используйте текстовый редактор (например, nano, vim, gedit) для создания сценария оболочки. Например, создайте файл с именем copy_directories.sh:
sudo vi copy_directories.sh

Шаг 3. Напишите цикл For

  • Внутри скрипта напишите цикл for для обхода каждого каталога и копирования его в место назначения:
#!/bin/bash
mkdir -p /my_directory
 # Loop through each directory and copy it to /my_directory
for dir in dir1 dir2 dir3; do
 echo “Copying $dir to /my_directory…”
  cp -rv “$dir” /my_directory
done
  • Напишите цикл ForЗамените dir1, dir2, dir3 фактическими именами каталогов, которые вы хотите скопировать. Настройте /path/to/destination/ на целевой каталог, в который вы хотите скопировать эти каталоги.

Сделайте скрипт исполняемым

Сделайте скрипт исполняемым с помощью команды chmod:

sudo chmod +x copy_directories.sh

sudo chmod +x copy_directories.shШаг 4. Запустите сценарий

  • Выполните скрипт для копирования каталогов:
./copy_directories.sh

Запустите сценарийСпособ 3: использование команды rsync

Шаг 1. Перейдите в домашний каталог.

  • Используйте команду cd, чтобы изменить каталог на родительский каталог, содержащий каталоги, которые вы хотите скопировать.
cd /path/to/Home-directory

Шаг 2. Используйте rsync для копирования каталогов:

  • Используйте команду rsync с опцией -a (архив) для копирования нескольких каталогов:
rsync -a dir1 dir2 dir3 /path/to/destination/

rsync -a каталог1 каталог2 каталог3 /путь/к/назначения/Заключение

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

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


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

Копирование нескольких каталогов одной командой – часто задаваемые вопросы

Могу ли я скопировать скрытые каталоги этими методами?

Да, это либо упоминается в команде, либо с использованием подстановочных знаков скрытые каталоги будут скопированы. Пример: cp -r .* /пункт назначения/.

В чем разница между cp и rsync?

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

Как сохранить права доступа к файлам и временные метки?

Используйте -p с cp. Разрешения, метки времени и другие атрибуты не будут потеряны. rsync с аргументом -a делает то же самое.

Могу ли я использовать его для копирования каталогов в другие системы?

Конечно же, это блестящее применение rsync. Более того, вы можете скопировать все деревья каталогов на удаленный компьютер через SSH. Пример: rsync -avz /source/user@remote:/destination/.

Что произойдет, если каталог уже существует в пункте назначения?

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