Простой скрипт, добавляющий текущий каталог в архив.
1. Добавить текущий каталог в архив со всеми подкаталогами и файлами.
Т.е., если вы находитесь в каталоге
/home/user/directory, то скрипт должен добавить в архив сам каталог, и все содержимое.2. Добавить только содержимое (т.е. в архиве присутствует только содержимое каталога, но не сам каталог).
3. Вывод справки об использовании скрипта по ключу
-h или --helpЧтобы заархивировать текущий каталог разными способами, надо добавить параметр. Пусть скрипт, запущенный без параметров, архивирует текущий каталог вместе с ним самим, а скрипт, запущенный с параметром
-nc (no catalog), архивирует только содержимое. Еще надо вывести помощь, а если подсунули какой-то другой параметр, то отругаться и вывести помощь.Уточнение. Архив, из-за алгоритма работы архиватора, не сможет находиться в текущем каталоге, вне зависимости от того, с самим каталогом создается архив, или без. Архив надо создать в каталоге уровнем выше, а соответственно, предусмотреть ситуацию, когда пользователь вызывает скрипт из корневого каталога (выше него нет ничего).
Уточнение #2. Поскольку, про имя архива ничего не сказано, имя архива будет
текущий_каталог.tar.gz1. Поскольку, помощь будет вызываться в двух случаях, напишем отдельную функцию, чтоб вызывать помощь, когда нужно:
print_help()
{
echo "Add current directory and subdirectories to tar.gz archive"
echo "Use "`basename $0`" [-nc]"
echo "[-nc] - add only content current directory (and subdirectories)."
echo
echo "Archive name == current directory name."
echo "Archive will be created to up-directory."
exit 1
}2. Проверяем вызов помощи пользователем (в параметрах скрипта задано
-h или --help):if [[ "$1" == "-h" || "$1" == "--help" ]]; then
print_help
fi3. Проверяем, не запущен ли скрипт в корневом каталоге (
/):CURDIR=`pwd`
if [ "$CURDIR" == "/" ]; then
echo "Oh, no! It's root directory!"
exit 1
fiПояснение:
`` обратные кавычки - те, которые, на клавише Ё, отправляют вывод работы команды в переменную. pwd выводит текущую директорию4. Формируем имя архива и путь к нему и получаем имя текущего каталога
DIRNAME=`basename $CURDIR`
ARHNAME="../"$DIRNAME".tar.gz"Пояснение: команда
basename без дополнительных параметров, отрезает весь путь от имени файла, т.е. выводит на консоль только имя файла без относительного или абсолютного пути.5. Если скрипту не заданы аргументы:
if [ $# -ne 1 ]; thenПояснение: системная переменная
$# хранит количество аргументов скрипта, заданных в командной строке.запускаем архиватор, для создания архива вместе с текущим каталогом:
tar -czvf $ARHNAME "../"$DIRNAMEПояснение:
tar сам обрежет символы ../ и добавит, что надо.6. Если параметр #1 скрипта присутствует, то проверяется, равен ли он
-nc.else
if [ "$1" == "-nc" ]; then7. Если да, вызывается архиватор, архивирующий содержимое текущего каталога (без самого каталога):
tar -czvf $ARHNAME "."8. Иначе, выводится сообщение о недопустимом значении параметра и помощь по использованию скрипта:
else
echo "Wrong parameter(s)!"
echo
print_help
Скрипт целиком на GitHub
На PasteBin
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/03/05/pros
