Примітка: - $ USER надрукує поточні імена користувачів, що входять в систему.
Якщо вам цікаво, яка версія оболонки bash встановлена в системі, ми можемо перевірити її за допомогою наступної команди.
$ bash --версіяВихід версії 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.
#!/ bin / bashdpath = / var / log / nginx / *
для FILE в $ dpath
робити
якщо [[-f $ FILE]]
тоді
cp $ FILE / home / $ USER /
ще
echo “У вказаному шляху немає файлів."
fi
зроблено
Скопіюйте всі файли певних розширень
У цьому прикладі ми скопіюємо всі файли за допомогою .розширення журналу. Нам потрібно додати *.увійдіть до шляху, щоб повторити єдиний файл за допомогою .розширення журналу лише для циклу.
#!/ bin / bashдля ФАЙЛУ в / var / log / nginx / *.журнал
робити
cp $ FILE / home / $ USER /
зроблено
Скопіюйте всі файли, включаючи каталог
У цьому прикладі ми будемо копіювати всі файли, включаючи каталоги, рекурсивно. Для цього нам просто потрібно додати команду -R cp, де -R визначає рекурсивне отримання каталогу.
#!/ bin / bashдля FILE у / var / log / *
робити
cp -R $ FILE / home / $ USER /
зроблено
Скопіюйте файли із вказаного користувачем шляху
У цьому прикладі ми скопіюємо файли із зазначеного користувачем каталогу. Для цього ми будемо використовувати команду read для запиту шляху у користувача, а потім перевірити, чи надає користувач шлях до dir чи ні, що робиться прапором -d в умові. Після перевірки dir, ми будемо використовувати цикл for для ітерації всіх файлів і dir всередині даного шляху, а потім знову відфільтруємо єдині файли, використовуючи умову if. Якщо умова відповідає, буде виконана наступна команда cp.
#!/ bin / bashecho “Будь ласка, вкажіть шлях до реж."
шлях читання
якщо [[-d $ шлях]]
тоді
для FILE у $ path / *
робити
якщо [[-f $ FILE]]
тоді
cp $ FILE / home / $ USER /
ще
echo “У вказаному шляху немає файлів."
fi
зроблено
ще
ехо “Шлях до папки потрібен”
fi
У моєму домашньому каталозі я маю такі файли та каталог.
Вихідні дані при наданні шляху до файлу.
Вихідні дані при наданні шляху розташування папки.
Після запуску файлу сценарію ми можемо перевірити вихідні дані у заздалегідь визначеному каталозі сценарію. У моєму випадку я скопіював файл у своєму домашньому каталозі, і ось такий результат.
Висновок
У цій статті ми дізнаємося про те, як копіювати файли за допомогою сценаріїв bash. Ми можемо використовувати багато інших операцій, таких як цикл, if-else тощо. Сценарії Bash ефективніші при роботі з декількома командами для виконання конкретних завдань. Сподіваюся, вам сподобалась ця стаття про копіювання файлів за допомогою сценарію bash.