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