Файлы копирования сценария Bash

Обновлено: 21.11.2024

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

Фон

Концептуализация сценария

Что мне действительно нужно, так это место для хранения всех этих трудно запоминающихся IP-адресов и доменов – что-то вроде переменных. Затем, когда мне нужно использовать SCP, я могу просто передать переменную в SCP и не беспокоиться о том, что запомню или опечатаю какой-то запутанный адрес. Достаточно просто.

Давайте посмотрим, как работает SCP. Основной синтаксис, по сути, таков:

Тогда я могу составить скрипт с псевдонимом, в основном с двумя переменными: первая переменная, "$1", будет ключевым словом назначения (например, блог или pi); в зависимости от ключевого слова я могу передать путь назначения команде SCP (например, user@example.com:~/pathto/destination/file.txt). Вторая переменная, "$2", будет путем к локальному файлу (т. е. [/pathto/source/file.txt]). Таким образом, сценарий очень легко собрать: создайте файл в предпочитаемом вами редакторе и назовите его scpx.sh

Сценарий: копирование файла SCP

Коротко и понятно — вот как это выглядит:

Я присвоил скрипту псевдоним для запуска при вводе scpx в терминале, что означает, что я буду форматировать свою команду следующим образом: $ scpx [$1] [$2] -- или, с помощью фактические значения $ scpx blog /pathto/source/file.txt. Если «$1» равно моему ключевому слову blog, то имя пользователя блога, адрес и путь к целевому файлу передаются команде SCP. Обратите внимание, что папка назначения фиксирована. Аналогичным образом, если «$1» равно pi, сценарий передает мои учетные данные Raspberry Pi и фиксированный путь к команде SCP. Путь к исходному файлу, хранящийся в "$2", помещается в соответствующие места также внутри команды SCP, хотя он анализируется с помощью базового имени, так что, если это длинный путь, передается только имя файла. путь назначения. Это означает, что есть только одна оговорка по использованию этого скрипта:

  1. У меня есть фиксированные папки назначения для копирования файлов. Например, на моем сервере блогов я держу папку за пределами корневого веб-сайта специально для «загрузок» SCP. Я делаю это, потому что веб-корень имеет версию с Git. Я не хочу, чтобы в моем git-репозитории с SCP всплывали какие-то вещи, и в любом случае единственное, что я перемещаю в блог вне репозитория, — это скрипты и приложения, которые нужно запускать на сервере. С моим Raspberry Pi мне просто нравится иметь специальную папку «Общие», чтобы я знал, что приходит извне. Если вам нужна гибкость для настройки путей назначения, очевидно, что этот сценарий не подходит для этого. Вы можете адаптировать сценарий, чтобы разрешить настраиваемые пути назначения, но. честно говоря, к тому времени ваша экономия нажатий клавиш начинает уменьшаться довольно быстро: вы могли бы также отказаться от сценария и использовать SCP изначально - может быть, просто поместить запутанные домены в переменные среды (полностью непроверенные. ). В идеале, чтобы свести нажатия клавиш к минимуму, вы должны запускать этот скрипт из того же каталога, что и файл, который вы хотите переместить с помощью SCP.

Вот скрипт в действии, запускаемый как внутри, так и вне каталога исходного файла:

Это относится к файлам, и это здорово, но как насчет папок?

Другой скрипт: копирование папки SCP

Для копирования папок с помощью SCP необходимо включить в команду параметр -r. Потенциально вы можете сделать это, используя третью встроенную переменную (например, «$3») в приведенном выше сценарии. Лично я выбрал то, что мне кажется менее трудоемким: создать еще один скрипт, scpr.sh, и запустить его с другим псевдонимом $ scpr [$1] [$2]

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

Отправка всего содержимого моей папки Scripts на мой Raspberry Pi. Да, у меня есть JPEG-файлы Принцессы-невесты!

На этом все. В этом нет ничего особенного, но это, безусловно, снижает остроту работы с SCP. Надеюсь, что кому-то из вас он покажется полезным.

Bash (оболочка Bourne Again Shell) — это оболочка, предназначенная для выполнения команд и сценариев. Bash был развитой версией оболочки sh. Bash Script — это файл, в котором несколько команд оболочки записываются для выполнения определенной задачи. В этой статье мы увидим, как мы можем скопировать несколько файлов с помощью скрипта bash. В этой статье я использую Ubuntu 20.04 для демонстрации примера.

Примечание: $USER напечатает имена пользователей, которые вошли в систему.

Если вам интересно, какая версия оболочки bash установлена ​​в системе, мы можем проверить ее с помощью следующей команды.

Вывод версии Bash.

Создание и выполнение сценария Bash

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

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

Когда мы выполним скрипт, в нашем терминале появится следующая ошибка.

Первоначальное выполнение файла bash.

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

Вывод после предоставления разрешения.

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

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

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

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

Скопировать все файлы, включая каталог

В этом примере мы рекурсивно скопируем все файлы, включая каталоги. Для этого нам просто нужно добавить команду -R cp, где -R определяет рекурсивную выборку каталога.

Копировать файлы по указанному пользователем пути

В этом примере мы будем копировать файлы из указанного пользователем каталога. Для этого мы будем использовать команду чтения, чтобы запросить путь у пользователя, а затем проверить, предоставил ли пользователь путь к каталогу или нет, что делается с помощью флага -d в условии. После проверки каталога мы будем использовать цикл for для перебора всех файлов и каталогов внутри заданного пути, а затем снова отфильтруем единственные файлы, используя условие if. Если условие соответствует, будет выполнена следующая команда cp.

В моем домашнем каталоге есть следующие файлы и каталог.

Вывод при указании пути к файлу.

Вывод при указании пути к каталогу.

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

Заключение

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

Об авторе

Карим Буздар

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

Что такое команда копирования в сценариях оболочки?

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

Синтаксис команды CP

Как оператор Linux, вам необходимо выучить команду CP, и они перечислены ниже; эти параметры команды используются для копирования файлов и каталогов:

  • ЦП ИСТОЧНИКА
  • cp ИСХОДНЫЙ КАТАЛОГ
  • cp SOURCE1 SOURCE2 SOURCE3 SOURCEn DIRECTORY
  • cp [ВАРИАНТ] ИСТОЧНИК НАЗНАЧЕНИЕ
  • cp [ВАРИАНТ] ИСХОДНЫЙ КАТАЛОГ

Первая и вторая формы позволяют копировать файл «ИСТОЧНИК» в файл «ЦЕЛЬ» или в КАТАЛОГ, а третья форма позволяет копировать несколько файлов «ИСТОЧНИК» в КАТАЛОГ. Точно так же четвертая и пятая формы работают для особых целей.

Как скопировать файл в другой каталог

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

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

Приведенный выше скрипт скопирует «имя файла» в папку «тест».

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

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

Рекурсивное копирование

Рекурсивная копия

Второй способ

Чтобы скопировать каталог со всеми его файлами

Звездочка (*) означает копирование всего в каталоге в другой.

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

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

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

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

Используйте параметр -v:

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

Если вы хотите создать копию файла test.docx в каталоге, но сохранить его как tutorial.docx, выполните:

Сохраните копию файла test.docx как tutorial.docx

Вывод:

Вывод файла копии в сценарии оболочки

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

Давайте скопируем файлы test.c, linux.h и con.c в другой каталог с именем myfiles:

Скопируйте файлы test.c, linux.h и con.c

Если каталог находится в подкаталоге:

Каталог находится в подкаталоге

Если вы хотите легко открывать файлы Linux в Windows

По сути, невозможно получить доступ к файлам Linux в Windows, если вы не используете Linux Reader. Это связано с тем, что Windows не поддерживает файловые системы Linux; следовательно, ваши разделы Linux скрыты от Проводника Windows. Но с DiskInternals Linux Reader вы можете получить доступ к разделам Linux в Windows и открыть файлы, сохраненные внутри.

Интересно, что DiskInternals Linux Reader работает как для пользователей ПК с двойной загрузкой, так и для пользователей виртуальных машин. Программное обеспечение имеет удобный интерфейс и поддерживает все файловые системы Linux (Ext, UFS, HFS, ReiserFS и APFS).

Как использовать DiskInternals Linux Reader

  • Загрузите и установите Linux Reader в Windows.

Установите Linux Reader в Windows

  • Запустите программу и щелкните диск, содержащий разделы Linux.

Вам нужно выбрать диск

  • DiskInternals Linux Reader просканирует жесткий диск и отобразит все сохраненные на нем файлы и папки.
  • Нажмите правой кнопкой мыши на файлы, чтобы просмотреть их в новом окне.

Предварительный просмотр всех файлов

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