Linux скопировать структуру каталогов
Я хочу создать клон структуры нашего многотервального файлового сервера. Я знаю, что cp -parents могут перемещать файл и его родительскую структуру, но есть ли способ скопировать структуру каталогов без изменений?
Я хочу скопировать в систему Linux, и наш файловый сервер там установлен CIFS.
Вы можете сделать что-то вроде:
чтобы создать список каталогов, затем
для создания каталогов в пункте назначения.
Вот простое решение с помощью rsync:
- одна строка
- нет проблем с пробелами
- сохранить разрешения
Я не знаю, если вы ищете решение для Linux. Если это так, вы можете попробовать следующее:
Скопируйте атрибуты каталогов и файлов, но не файлы:
Затем вы можете удалить атрибуты файлов, если они вас не интересуют:
Просто замените SOURCE_DIR и DEST_DIR.
Подставив target_dir и source_dir с соответствующими значениями:
Протестировано на OSX + Ubuntu.
Следующее решение хорошо работало для меня в различных средах:
Это решает даже проблему с пробелами:
В исходном каталоге/источнике:
затем заново создайте его во вновь создаваемом каталоге:
Питон script от Сергея Колодяжного размещен на Скопировать только папки не файлы?:
или из оболочки:
Вот решение в php, которое:
- копирует каталоги (не рекурсивно, только один уровень)
- сохраняет разрешения
- в отличие от решения rsync, работает быстро даже с каталогами, содержащими тысячи файлов, поскольку он даже не попадает в папки
- не имеет проблем с пробелами
- должно быть легко читать и настраивать
Создайте файл как syncDirs.php с этим содержимым:
Запустите его как пользователь с достаточными правами:
sudo php syncDirs.php/var/source/var/destination
Другой подход заключается в использовании довольно удобного tree и навигации по деревьям каталогов на основе его сильных опций. Есть варианты для каталога только, исключающих пустых каталогов, исключить имена с рисунком, включают в себя только имена с рисунком, и т.д. Проверьте man tree
Преимущество: вы можете редактировать или просматривать список, или если вы делаете много сценариев и часто создаете пакет пустых каталогов
Подход: создайте список каталогов, используя tree , используйте этот список в качестве аргумента для ввода в mkdir
-dfi перечисляет только каталоги, печатает полный путь для каждого имени, заставляет дерево не печатать строки отступа,
--noreport Позволяет печатать отчет о файле и каталоге в конце списка дерева, просто чтобы выходной файл не содержал пуха
Затем перейдите к месту назначения, где вы хотите пустые каталоги и выполните
Обычной практикой является использование команды cp для копирования файлов и rsync для копирования каталогов.
Чтобы иметь возможность копировать файлы и каталоги, у вас должны быть как минимум права на чтение исходного файла и права записи в целевой каталог.
Копирование файлов с помощью команды cp
В операционных системах Linux и Unix команда cp используется для копирования файлов и каталогов.
Если целевой файл существует, он будет перезаписан. Чтобы получить запрос на подтверждение перед перезаписью файлов, используйте параметр -i .
По умолчанию при использовании команды cp для копирования файла новый файл будет принадлежать пользователю, выполняющему команду. Используйте параметр -p чтобы сохранить режим файла, владельца и временные метки :
Скопируйте файл в каталог
Чтобы скопировать файл в каталог, укажите абсолютный или относительный путь к каталогу. Если целевой каталог не указан, файл копируется в текущий каталог.
В следующем примере мы file.txt файл file.txt в file.txt /backup :
При указании в качестве места назначения только имени каталога скопированный файл будет иметь то же имя, что и исходный файл.
Если вы хотите скопировать файл под другим именем, вам необходимо указать желаемое имя файла:
Приведенная выше команда скопирует файл в указанный каталог как new_file.txt .
Копировать несколько файлов
Чтобы скопировать сразу несколько файлов и каталогов, укажите имена исходных файлов и каталогов, за которыми следует каталог назначения в качестве последнего аргумента:
При копировании нескольких файлов местом назначения должен быть каталог.
Команда cp также позволяет использовать сопоставление с образцом. Например, чтобы скопировать все файлы .jpg из текущего каталога в каталог /backup , вы должны использовать:
Копирование каталогов с помощью команды cp
Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте параметр -R или -r . В следующем примере мы копируем каталог Pictures в Pictures_backup :
Приведенная выше команда создаст каталог назначения и рекурсивно скопирует все файлы и подкаталоги из источника в каталог назначения.
Если целевой каталог уже существует, сам исходный каталог и его содержимое копируются в целевой каталог. Чтобы скопировать только файлы и подкаталоги, но не целевой каталог, используйте параметр -T :
Параметры, используемые при копировании файлов, также могут использоваться при копировании каталогов. Основное отличие состоит в том, что при копировании каталогов необходимо использовать параметр -R .
Копирование файлов и каталогов с помощью команды rsync
rsync включает множество параметров, которые контролируют каждый аспект его поведения.
Наиболее полезная опция -a которая рекурсивно копирует каталоги, передает специальные и блочные устройства и сохраняет символические ссылки, время модификации, группу, владение и разрешения.
Чтобы скопировать один файл из одного места в другое, вы должны выполнить следующую команду:
Если целевой файл существует, rsync перезапишет его.
Эту же команду можно использовать для копирования каталога:
Чтобы узнать больше о rsync прочтите следующие статьи:
Выводы
Мы показали вам, как копировать файлы и каталоги в системах на базе Linux и Unix, используя утилиты cp и rsync .
Копирование файлов и каталогов является одной из наиболее распространенных задач, которые вы выполняете при работе в командной строке. В Linux есть несколько команд для копирования файлов с cp и rsync является наиболее широко используемыми инструментами.
Чтобы иметь возможность копировать файлы и каталоги, у вас должны быть как минимум права на чтение исходного файла и права на запись в целевой каталог.
Копирование файлов с помощью cp команды
В операционных системах Linux и Unix cp команда используется для копирования файлов и каталогов.
Самый простой вариант использования - скопировать файл в текущем рабочем каталоге. Например, чтобы скопировать файл с именем file.txt в файл с именем file_backup.txt в текущем каталоге , вы должны выполнить следующую команду:
Если целевой файл существует, он будет перезаписан. Чтобы получить запрос на подтверждение перед перезаписью файлов, используйте -i опцию.
По умолчанию при использовании cp команды для копирования файла новый файл будет принадлежать пользователю, выполняющему команду. Используйте -p опцию, чтобы сохранить режим файла, владельца и метки времени :
Еще одна полезная опция -v . При использовании этой опции команда печатает, что делается:
Скопируйте файл в каталог
Чтобы скопировать файл в каталог, укажите абсолютный или относительный путь к каталогу. Если каталог назначения опущен, файл копируется в текущий каталог.
В следующем примере мы копируем файл file.txt в /backup каталог:
Если в качестве места назначения указано только имя каталога, то скопированный файл будет иметь то же имя, что и исходный файл.
Если вы хотите скопировать файл под другим именем, вам нужно указать желаемое имя файла:
Команда выше скопирует файл в указанный каталог как new_file.txt .
Скопируйте несколько файлов
Для одновременного копирования нескольких файлов и каталогов укажите имена исходных файлов и каталогов, а затем конечный каталог в качестве последнего аргумента:
При копировании нескольких файлов местом назначения должен быть каталог.
Команда cp также позволяет использовать сопоставление с образцом. Например, чтобы скопировать все .jpg файлы из текущего каталога в /backup каталог, вы должны использовать:
Копирование каталогов с помощью cp команды
Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте параметр -R или -r . В следующем примере мы копируем каталог Pictures в Pictures_backup :
Команда выше создаст каталог назначения и рекурсивно скопирует все файлы и подкаталоги из источника в каталог назначения.
Если целевой каталог уже существует, сам исходный каталог и все его содержимое будут скопированы в целевой каталог. Чтобы скопировать только файлы и подкаталоги, но не целевые каталоги, используйте -T параметр:
Параметры, используемые при копировании файлов, также можно использовать при копировании каталога. Основное отличие заключается в том, что при копировании каталогов необходимо использовать эту -R опцию.
Копирование файлов и каталогов с помощью rsync команды
rsync это быстрая и универсальная утилита командной строки, которая синхронизирует файлы и каталоги между двумя местоположениями. Он может быть использован для копирования файлов в локальные и удаленные места.
rsync включает в себя ряд параметров, которые контролируют каждый аспект его поведения. Наиболее полезный вариант - -a это рекурсивное копирование каталогов, передача специальных и блочных устройств, сохранение символических ссылок, времени модификации, группы, владельца и разрешений.
Чтобы скопировать один файл из одного места в другое, вы должны выполнить следующую команду:
Если целевой файл существует, он rsync будет перезаписан.
Эту же команду можно использовать для копирования каталога:
rsync угрожает исходным каталогам, которые заканчиваются косой чертой по- / другому. Если вы добавите косую черту в исходный каталог, команда скопирует только содержимое исходного каталога в целевой каталог. Если завершающий слеш опущен, rsync будет скопирован исходный каталог в целевой каталог. Самый безопасный вариант - всегда включать косую черту / как в пункте назначения, так и в источнике.
Чтобы узнать больше о rsync проверке следующих статей:
Вывод
В этом руководстве мы показали вам , как копировать файлы и каталоги в Linux и Unix системах , основанных на использовании cp и rsync утилиты.
Как следует из названия, команда rsync используется для локальной и удаленной синхронизации (или копирования) файлов и каталогов. Одной из важных особенностей rsync является то, что он работает по « алгоритму дельта-передачи », что означает, что он будет только синхронизировать или копировать изменения из источника в место назначения вместо копирования всего файла, что в конечном итоге сокращает объем данных, отправляемых по сети. Вундеркинды Linux обычно используют команду rsync для повседневного управления резервным копированием, зеркалированием и восстановлением. Он использует удаленную оболочку, такую как SSH, при синхронизации файлов с локальной машины на удаленную, и любой пользователь в системе может использовать команду rsync, поскольку она не требует прав root или sudo .
В этой статье мы обсудим 17 полезных примеров команды rsync в Linux, эти примеры особенно помогут новичкам в Linux более эффективно управлять задачами синхронизации, зеркалирования и резервного копирования.
Команда Rsync доступна для всех операционных систем типа UNIX и Linux. Когда мы выполняем минимальную установку CentOS и RHEL OS, тогда пакет rsync не является частью установки по умолчанию, поэтому для установки rsync на CentOS и RHEL выполните следующую команду yum
В операционных системах Debian Like (Ubuntu и Linux Mint) используйте команду ниже apt для установки инструмента rysnc
Синтаксис команды rsync:
Некоторые из наиболее часто используемых параметров команды rsync перечислены ниже:
Давайте перейдем к полезным примерам команды rsync
Пример: 1) Копирование или синхронизация файлов локально (rsync -zvh)
Предположим, мы хотим скопировать файл из домашнего каталога пользователя pkumar в папку /opt/back, выполните следующую команду rsync >rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes received 35 bytes 2.73M bytes/sec
total size is 6.15M speedup is 1.50
[[email protected]
Выше мы использовали такие параметры, как -z для сжатия, -v для подробного вывода и -h для вывода, удобочитаемого человеком.
Пример: 2) Копировать или синхронизировать каталог локально (rsync -zavh)
Предположим, мы хотим скопировать или синхронизировать домашний каталог пользователя pkumar в папку /opt/backup выполните следующую команду rsync с параметрами -zavh,
Давайте проверим, скопирован ли каталог или нет, выполните команду ниже,
Как мы видим, каталог «pkumar» создается в папке назначения, и его содержимое также копируется. В приведенном выше примере, если использовать trail / после исходной папки(/home/pkumar/) тогда команда rsync не создаст каталог pkumar в месте назначения, а скопирует только содержимое..
Локальное рекурсивное копирование файлов и каталогов (rsync -zrvh or rsync -zavh)
Предположим, у нас есть несколько файлов и каталогов внутри домашнего каталога пользователя pkumar, используйте приведенную ниже команду rsync для рекурсивного копирования файлов и каталогов, либо используйте параметр -a или -r для рекурсивного копирования файлов и каталогов.
Примечание . В команде rsync параметр -a используется для архивирования во время копирования или синхронизации, а кроме архивирования параметр -a также используется для следующих целей:
- рекурсивно копировать файлы и каталог
- копировать символические ссылки как символические ссылки
- сохранить разрешения, группу, время модификацииправо, собственности
Пример: 4) Копирование или синхронизация файлов и каталогов из локальной в удаленную систему.
Предположим, мы хотим скопировать папку “/home/pkumar/techi” с локальной машины на удаленную (192.168.1.29) /opt
Пример: 5) Копирование или синхронизация файлов и каталогов с удаленного компьютера в локальную систему.
Предположим, мы хотим скопировать файлы и каталоги с удаленного компьютера (192.168.1.29) в нашу локальную систему, в приведенном ниже примере я копирую удаленную папку “/opt/rpms_db” на моем локальном компьютере в папку /tmp
Вышеуказанная команда автоматически создаст папку “rpms_db” в папке /tmp на нашем локальном компьютере
Пример: 6) Укажите удаленную оболочку во время синхронизации (rsync -e ssh)
В команде rsync мы можем указать удаленную оболочку, например ssh, во время синхронизации, предположим, что мы хотим использовать безопасную связь между источником и целевой машиной через rsync, тогда мы должны использовать ssh в качестве удаленной оболочки, пример показан ниже
Пример: 7) Отображение хода синхронизации в выводе команды rsync
Если вы хотите видеть прогресс синхронизации или копирования в команде rsync, используйте “–progress“, пример показан ниже.
Пример: 8) Скопируйте структуру каталогов без копирования файлов
Есть несколько сценариев, когда мы хотим скопировать структуру каталогов, пропуская файлы только с локального компьютера на удаленный или наоборот.
Предположим, мы хотим скопировать структуру каталогов “/home/pkumar” с локального компьютера на удаленный (192.168.1.29) в папку /opt folder.
Пример: 9) Возобновить передачу больших файлов после сбоя в scp
В профиле администратора linux есть несколько сценариев, когда мы начали копировать файл большего размера с помощью команды scp, но он прервался в середине, и мы не можем позволить себе начать копирование его снова с помощью scp из-за его большого размера и затрат времени.
Таким образом, в этой ситуации можно использовать команду rsync, поскольку она может начать копирование файла с того места, где оно было остановлено или завершено, или, другими словами, rsync может передавать файлы, которые частично скопированы с помощью команды scp. Пример показан ниже,
Пример: 10) Удалить файлы в месте назначения, если его нет в источнике (–delete)
Если вы уже синхронизировали файлы из источника в место назначения и из источника вы удалили файлы, вы можете заставить команду rsync удалить файлы в месте назначения, используя параметр –delete, пример показан ниже
Пример: 11) Установите ограничение на размер передаваемого файла (–max-size)
Если вы не хотите передавать или копировать большие файлы с помощью rsync, используйте опцию ‘–max-size=’, Предположим, мы не хотим передавать файлы, чьи размер больше 500К,
Пример: 12) Не синхронизировать/копировать измененный файл в месте назначения
Есть несколько сценариев, в которых мы изменили файлы в месте назначения, и мы не хотим перезаписывать измененные файлы из источника во время синхронизации, поэтому этого можно легко достичь с помощью параметра -u в команде rsync.
Пример: 13) Удалить файлы из источника после синхронизации (–remove-source-files)
Предположим, вы хотите удалить файлы из источника после завершения синхронизации с помощью команды rsync. В приведенном ниже примере папка из локальной системы “/home/pkumar/techi.tgz” синхронизируется с удаленной системой (192.168.1.29), после завершения синхронизации файл удаляется из источника.
Пример: 14) Команда rsync пробного запуска перед фактической синхронизацией
Могут быть ситуации, когда мы не говорим о поведении команды rsync, поэтому в таких случаях лучше выполнить пробный запуск rsync.
Пример: 15) Включить и исключить файлы во время синхронизации с rsync
Бывают ситуации, когда мы хотим скопировать или синхронизировать файлы и каталоги определенного типа и хотим исключить файлы или каталоги определенного типа. Команда Rsync поддерживает параметры включения и исключения.
В приведенном ниже примере вы хотите скопировать файлы типа pdf и rpm и исключить типы файлов png.
Пример: 16) Установите ограничение на скорость передачи данных в rsync(–bwlimit=<KB/s>)
В команде rsync мы можем установить ограничение полосы пропускания для передачи данных с одной машины на другую, используйте параметр‘–bwlimit=<KB/S>‘ в команде rsync, чтобы установить ограничение на скорость передачи данных.
Предположим, мы хотим установить максимальную скорость передачи данных (скорость) 600 КБ / с с помощью rsync, пример показан ниже.
Пример: 17) Просмотр разницы в файлах и каталогах между источником и местом назначения
Используйте параметр “-i” в команде rsync, чтобы указать разницу в файлах и каталогах между источником и местом назначения. Пример показан ниже
Согласно вышеприведенному выводу команды, есть разница в файле с именем «projects.txt» в месте назначения. Ниже приведены значения ключевых слов в выводе выше.
- d: указывает на изменение в файле назначения
- f: указывает файл
- t: указывает изменение меток времени
- s: указывает на изменение размера
Вот и все из этого руководства, на случай, если эти примеры помогут вам лучше понять команду rsync, тогда, пожалуйста, поделитесь своими отзывами и комментариями.
Читайте также: