Примечание: - $ USER распечатает имена пользователей текущего входа в систему.
Если вам интересно, какая версия оболочки bash установлена в системе, мы можем проверить это с помощью следующей команды.
$ bash --versionВывод версии Bash.
Создание и выполнение сценария Bash
Начнем с создания простого файла с помощью любого редактора по вашему выбору. Для меня редактор vi удобнее. Чтобы сделать файл исполняемым, нам нужно добавить shebang (!#) и расположение интерпретатора bash в начале скрипта. Я создал текст.txt и добавьте его в каталог bash_demo в моем домашнем каталоге, который содержит текст для демонстрационных целей.
$ touch bash_demo.ш$ vi bash_demo.ш
Добавьте следующие строки в текстовый редактор для демонстрации примера после создания файла; если вы этого не сделали, редактор создаст новый файл при записи и выйдет.
#!/ bin / bashcp текст.txt / tmp /
echo «Файл скопирован.”
Мы можем выполнить скрипт, используя ./ перед файлом сценария, который определяет текущий файл каталога.
$ ./ bash_demo.шКогда мы выполняем скрипт, в нашем терминале будет выдана следующая ошибка.
Первоначальное выполнение файла bash.
Когда мы создаем файл по умолчанию, у пользователя нет разрешения на выполнение для файла. Чтобы предоставить пользователю разрешение на выполнение, необходимо выполнить следующую команду.
$ chmod + x bash_demo.шВывод после предоставления разрешения.
Копировать только файлы из определенного каталога
Чтобы получить все файлы и каталог по определенному пути, мы будем использовать цикл for в скрипте, а затем отфильтровать единственный файл, используя условие if. В приведенном ниже примере мы выполняем команду cp, только если итератором был файл, который определен -f flag.
#!/ bin / bashdpath = / var / log / nginx / *
для ФАЙЛА в $ dpath
делать
если [[-f $ FILE]]
тогда
cp $ FILE / home / $ USER /
еще
echo «По указанному пути нет файлов.”
фи
Выполнено
Скопируйте все файлы с определенными расширениями
В этом примере мы скопируем все файлы с .расширение журнала. Нам нужно добавить *.войдите в путь, чтобы выполнить итерацию единственного файла с .расширение журнала только для цикла.
#!/ bin / bashдля ФАЙЛА в / var / log / nginx / *.бревно
делать
cp $ FILE / home / $ USER /
Выполнено
Скопируйте все файлы, включая каталог
В этом примере мы скопируем все файлы, включая каталоги, рекурсивно. Для этого нам просто нужно добавить команду -R cp, где -R определяет рекурсивную выборку каталога.
#!/ bin / bashдля ФАЙЛА в / var / log / *
делать
cp -R $ FILE / home / $ USER /
Выполнено
Копировать файлы по указанному пользователем пути
В этом примере мы скопируем файлы из каталога, указанного пользователем. Для этого мы воспользуемся командой чтения, чтобы запросить путь у пользователя, а затем проверим, предоставляет ли пользователь путь к каталогу или нет, что делается с помощью флага -d в условии. После проверки dir мы будем использовать цикл for, чтобы перебрать все файлы и каталог внутри заданного пути, а затем снова отфильтровать единственные файлы, используя условие if. Если условие совпадает, будет выполнена следующая команда cp.
#!/ bin / bashecho «Укажите путь к каталогу.”
читать путь
если [[-d $ путь]]
тогда
для ФАЙЛА в $ path / *
делать
если [[-f $ FILE]]
тогда
cp $ FILE / home / $ USER /
еще
echo «По указанному пути нет файлов.”
фи
Выполнено
еще
echo «Требуется путь к каталогу»
фи
В моем домашнем каталоге есть следующие файлы и каталог.
Вывод при указании пути к файлу.
Вывод при указании пути к каталогу.
После выполнения файла сценария мы можем проверить вывод в предопределенном каталоге в сценарии. В моем случае я скопировал файл в свой домашний каталог, и вот результат.
Заключение
В этой статье мы узнаем, как копировать файлы с помощью скриптов bash. Мы можем использовать множество других операций, таких как цикл, if-else и т. Д. Сценарии Bash более эффективны при работе с несколькими командами для выполнения определенных задач. Надеюсь, вам понравилась эта статья о копировании файлов с помощью сценария bash.