маленькое дополнение к шелл-скрипту

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
typus
Сообщения: 65

маленькое дополнение к шелл-скрипту

Сообщение typus »

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

Задача такая:

Находясь в линукс - или freebsd - локальной машине, необходимо подключиться по ssh, соединиться с хостом удаленной базы - бд и сайт на разных хостах - после чего выполнить mysqldump и затем полученный дамп скопировать себе в папку. Нужно, чтобы все это дело последовательно обрабатывалось простым скриптом и было записано в крон - в принципе, все основное таким именно простейшим в одну строчку скриптом сделал, вышло где то так

Код: Выделить всё

#!/bin/sh
BACKUPFILE=/home/user/dumps/db_`date +%H:%M_%d%m%y`.sql.gz
ssh user@mysite.com 'mysqldump -u dbuser -ppassword db_mydb -h dbhost | gzip' > ${BACKUPFILE}

Ну вот, в принципе, прописал в кроне и все работает.
опционально можно еще добавить строчку типа -

Код: Выделить всё

/usr/bin/gunzip < ${BACKUPFILE} | /usr/local/bin/mysql -u dbuser -ppassword db_mydb

- если без крона, то можно без полных путей, и тогда последним действием будет рестор базы на локалхосте....
Имена специально хочу делать с датой и временем, и вот почему.
Единственное, что не могу понять. Надо, чтобы этих дампов не собиралось там очень уж много. Ну скажем, я делаю бекап регулярно, каждый час.
Нафига мне там 24 штуки в сутки чтобы хранились и копились? Надо добавить, чтобы скрипт выполнял проверку на число файлов в директории, и если их там больше скажем 3-х, все старые удалял, оставляя только 3 последних, по времени создания или по именам файлов, в которых как раз продублировано время создания.
ps:
вот щас подумал, получается такая штука.
каждый новый дамп будет не больше и не меньше, а только и всегда четвертым, если я хочу оставлять скажем три файла, то мне надо удалять всегда один - старейший, ну, или, по логике, имеющий наименьший размер..
Вроде просто все, но я на линуксы в общем только недавно начал более-менее пристально смотреть, с синтксисом вообще каша в голове,
так что, если кому не сложно, напишите please, как вы себе этот код видите...
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: маленькое дополнение к шелл-скрипту

Сообщение Goodvin »

typus писал(а):
25.06.2009 15:26
вот щас подумал, получается такая штука.
каждый новый дамп будет не больше и не меньше, а только и всегда четвертым, если я хочу оставлять скажем три файла, то мне надо удалять всегда один - старейший, ну, или, по логике, имеющий наименьший размер..
Вроде просто все, но я на линуксы в общем только недавно начал более-менее пристально смотреть, с синтксисом вообще каша в голове,
так что, если кому не сложно, напишите please, как вы себе этот код видите...
Вы не с той стороны беретесь.
Сначала нарисуйте на бумажке блок-схему алгоритма, где словами опишите действия и условия, которые хотите реализовать.
А потом напишите нам какие конкретно действия/части аглоритма вызывают у Вас затруднения при реализации посредством синтаксиса BASH-скрипта.
А то у меня подозрения, что Вы сами слабо понимаете то, чего хотите от других.
Спасибо сказали:
Аватара пользователя
Mage-Warrior
Сообщения: 869
Статус: Семь раз понюхай, один раз откуси!
ОС: SlackWare 12.1

Re: маленькое дополнение к шелл-скрипту

Сообщение Mage-Warrior »

А я все же дам небольшую наметку человеку для решения одной/двумя строками.

Код: Выделить всё

date +%y%m%d_%H%M>>/home/user/dumps/remove.log
find /home/user/dumps/ -type f -mmin +300 -delete 2>>/home/user/dumps/remove.log
Рекурсивно ищет обычные файлы, которые были изменены (last modified - modification time) 300 и более минут назад (5 часов), и удаляет их. В случае ошибок при попытке удаления, данные об этом помещаются в лог-файл remove.log.

P.S. Обратите внимание на формат, примененный в date. Применяйте его и для формирования имен файлов, так как сортировка по именам будет правильнее.
*- Большинство проблем, дружок, завсегда покажет лог! -*
Спасибо сказали:
typus
Сообщения: 65

Re: маленькое дополнение к шелл-скрипту

Сообщение typus »

Goodvin писал(а):
25.06.2009 16:21
typus писал(а):
25.06.2009 15:26
вот щас подумал, получается такая штука.
каждый новый дамп будет не больше и не меньше, а только и всегда четвертым, если я хочу оставлять скажем три файла, то мне надо удалять всегда один - старейший, ну, или, по логике, имеющий наименьший размер..
Вроде просто все, но я на линуксы в общем только недавно начал более-менее пристально смотреть, с синтксисом вообще каша в голове,
так что, если кому не сложно, напишите please, как вы себе этот код видите...
Вы не с той стороны беретесь.
Сначала нарисуйте на бумажке блок-схему алгоритма, где словами опишите действия и условия, которые хотите реализовать.
А потом напишите нам какие конкретно действия/части аглоритма вызывают у Вас затруднения при реализации посредством синтаксиса BASH-скрипта.
А то у меня подозрения, что Вы сами слабо понимаете то, чего хотите от других.

Вы не с той стороны беретесь.
Сначала нарисуйте на бумажке блок-схему алгоритма, где словами опишите действия и условия, которые хотите реализовать.
А потом напишите нам какие конкретно действия/части аглоритма вызывают у Вас затруднения при реализации посредством синтаксиса BASH-скрипта.
А то у меня подозрения, что Вы сами слабо понимаете то, чего хотите от других.

Что я хочу от скрипта-
есть директория, в ней - после исполнения предыдущей части скрипта - всегда 4 файла - file1, file2,file3,file4 . Файлы отличаются по размеру, дате создания, и имени, в котором тоже есть дата создания. возможно на мой взгляд так:
проход по циклу и по атрибутам файла - времени создания, имени или размеру - не особо важно, по какому именно, как проще так и лучше - определить один лишний файл и удалить его. Лишний файл определяется так - если по времени - то самый старый, если по размеру - то самый маленький.
Вот сейчас предложили так:

Код: Выделить всё

#bin/sh
ls -t -1 > /tmp/fl
i=0
while read fn; do
i=$(($i + 1))
if (i -gt 2);then
rm -f fn
fi
done < fl
rm -f fl

принцип понятен - не понятны последние строки. Не удаляется файл...
Спасибо сказали:
typus
Сообщения: 65

Re: маленькое дополнение к шелл-скрипту

Сообщение typus »

Mage-Warrior писал(а):
25.06.2009 16:50
А я все же дам небольшую наметку человеку для решения одной/двумя строками.

Код: Выделить всё

date +%y%m%d_%H%M>>/home/user/dumps/remove.log
find /home/user/dumps/ -type f -mmin +300 -delete 2>>/home/user/dumps/remove.log
Рекурсивно ищет обычные файлы, которые были изменены (last modified - modification time) 300 и более минут назад (5 часов), и удаляет их. В случае ошибок при попытке удаления, данные об этом помещаются в лог-файл remove.log.

P.S. Обратите внимание на формат, примененный в date. Применяйте его и для формирования имен файлов, так как сортировка по именам будет правильнее.


Спасибо, этот вариант работает, единственное, если я на ночь выключу компьютер,или еще что то, т.е если машина по каким то причинам будет выключена какое то время, то при следующем включении и запуске скрипта, который будет автоматом, будут удалены все файлы, так как все они будут старше стольки то часов. А я бы хотел, чтобы на всякий случай всегда оставалось 3 файла - мало ли, какие могут быть сбои...поэтому и подумал, что удалять надо всегда только один файл..
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: маленькое дополнение к шелл-скрипту

Сообщение Goodvin »

Вы уверены, что правильно и без ошибок скопировали текст скрипта от того, кто Вам его предложил ?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: маленькое дополнение к шелл-скрипту

Сообщение SLEDopit »

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

Код: Выделить всё

a=$(ls -ltr|wc -l);rm `ls -ltr|head -$(($a-3))|tail -$(($a-4))|awk '{print $9}'`
если что непонятно - спрашивайте. все поясню.
зы. жду не дождусь drBatty. уж очень интересно посмотреть на решение проблемы с помощью sed =)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
typus
Сообщения: 65

Re: маленькое дополнение к шелл-скрипту

Сообщение typus »

SLEDopit
записал в скрипт так:

Код: Выделить всё

#bin/bash
a=$(ls -ltr /home/user/dumps|wc -l);rm `ls -ltr /home/user/dumps|head -$(($a-3))|tail -$(($a-4))|awk '{print $9}'`

rm- пропущен операнд
Спасибо сказали:
typus
Сообщения: 65

Re: маленькое дополнение к шелл-скрипту

Сообщение typus »

Goodvin писал(а):
25.06.2009 17:57
Вы уверены, что правильно и без ошибок скопировали текст скрипта от того, кто Вам его предложил ?

Мне никто не поручился за правильность, начало то я под себя подогнал, а дальше нет.
совсем без изменений это так:

Код: Выделить всё

#bin/sh
ls -t -1 > /temp/fl
i=0
while read fn; do
i=$(($i + 1))
if (i -gt 2);then
rm -f fn
fi
done < fl
rm -f fl

выше я приводил только с одним изменением - /tmp вместо /temp
ну пути свои поставил, спотыкается на предпоследней строчке..
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: маленькое дополнение к шелл-скрипту

Сообщение SLEDopit »

typus
гу так, как вы исправили не получится, если скрипт запускается не из /home/user/dumps. пропущенный операнд говорит о том, что папка, из которой вы пытались что то удалить пустая. а если бы она была не пустая, то он выдал бы ошибку, что нет такого файла.
для того чтобы не было привязки к директории запуска можно поменять так:

Код: Выделить всё

a=$(ls -ltr /home/user/dumps|wc -l);cd /home/user/dumps; rm $(ls -ltr .|head -$(($a-3))|tail -$(($a-4))|awk '{print $9}')

вот сейчас проверил работоспособность скрипта:

Код: Выделить всё

[18:39]deb:~ $ mkdir test
[18:39]deb:~ $ i=0; while [ $i -lt 10 ]; do ((i++));touch test/$i.file;sleep 1; done
[18:39]deb:~ $ ls test
10.file  1.file  2.file  3.file  4.file  5.file  6.file  7.file  8.file  9.file
[18:39]deb:~ $ ls -ltr test
итого 0
-rw-r--r-- 1 user user 0 Июн 25 18:39 1.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 2.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 3.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 4.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 5.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 6.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 7.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 8.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 9.file
-rw-r--r-- 1 user user 0 Июн 25 18:39 10.file
[18:39]deb:~ $ a=$(ls -ltr test|wc -l);cd test; rm $(ls -ltr .|head -$(($a-3))|tail -$(($a-4))|awk '{print $9}')
[18:40]deb:~/test $ ls
10.file  8.file  9.file

хотя строчку можно и еще укоротить. люблю я окольными путями ходить =)

Код: Выделить всё

a=$(ls -ltr /home/user/dumps|wc -l);cd /home/user/dumps; rm $(ls -rt1 .|head -$(($a-3)))
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
typus
Сообщения: 65

Re: маленькое дополнение к шелл-скрипту

Сообщение typus »

SLEDopit писал(а):
25.06.2009 18:42
хотя строчку можно и еще укоротить. люблю я окольными путями ходить =)

Код: Выделить всё

a=$(ls -ltr /home/user/dumps|wc -l);cd /home/user/dumps; rm $(ls -rt1 .|head -$(($a-3)))

Вот этот вариант работает, а верхний - хоть ты что пиши - пропущен операнд, и все.
Да, если оставляю - $a-3 - из 4-х файлов 2 удаляется, 2 остается.
если -4 - один удаляется, 3 остается.
Т.е. в принципе, то, что надо, биг сенкс
Кстати, уже второй раз, после того как лишние файлы удалены, скрипт как раз и пишет - пропущен операнд, т.е. то, что он должен удалить, отсутствует, если я все понял. В моем случае - это если файлов меньше 4-х.
Похоже, длинная строка требует дополнительных условий, которых в моей папке нет, по сравнению с короткой.
В любом случае, все работает..

да,и ваш короткий вариант в виде a=$(ls -ltr /home/user/dumps|wc -l);rm `ls -rt1 /home/user/dumps|head -$(($a-4))` тоже работает.
зы: в моем конкретном случае это не важно, но в плане универсальности, на всякий случай, не удаляются файлы, если в имени есть пробелы.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: маленькое дополнение к шелл-скрипту

Сообщение drBatty »

SLEDopit писал(а):
25.06.2009 18:05
зы. жду не дождусь drBatty. уж очень интересно посмотреть на решение проблемы с помощью sed =)

вы все как-то пишете... то одностроком, то без отступов...
каша в описании алгоритма(точнее постановки задачи), каша в коде...
давайте начнём с начала:
составляем список файлов:

задача - оставить 4 последних файла?
ну что может быть проще:

Код: Выделить всё

ls -t|head -n4

куда тут sed засунуть - даже и не знаю...
ну разве что - rm вызвать...

Код: Выделить всё

ls -tr|sed -rn '5,$s/.*/echo \x27&\x27/ep'

если больше 4х файлов, то начиная с пятого их мы распечатываем.
удалять мне свои файлы жалко :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: маленькое дополнение к шелл-скрипту

Сообщение drBatty »

Mage-Warrior писал(а):
25.06.2009 16:50
date +%y%m%d_%H%M

date +%s

так проще.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Grats
Сообщения: 4
ОС: All

Re: маленькое дополнение к шелл-скрипту

Сообщение Grats »

...head -$(($a-3))...
А если там меньше 3 файлов? например при 2 файлах команда head --1 даст ошибку
Столкнулся я с задачей сохранять последние N бэкапов, решил следующим скриптом. При замене переменных в заголовке можно бэкапить чего угодно, главное, если имя сайта или имя БД входит в состав имени другого архива, pathto делать в разных каталогах

Код: Выделить всё

#!/bin/bash
dbuser=root
dbpass=123
dbname=wordpress
sitename=hosting1.local
pathto=/home/backup/
patfrom=/home/hosting1/public_html/
datestr=`date +%Y-%m-%d_%H:%M:%S`
logfile=daily.log
storedays=7
# дамп MySQL
echo "*** ${sitename} ${datestr} ***" >> ${pathto}${logfile}
mysqldump -u"$dbuser" -p"$dbpass" ${dbname} | gzip -c > "${pathto}mysql/${dbname}.${datestr}.mysql.gz"
if [ $? ]
  then
    echo "SQL dump for ${dbname} on ${sitename} was created successfully" >> ${pathto}${logfile}
  else
    echo "There were errors while creating SQL dump for ${dbname} on ${sitename}" >> ${pathto}${logfile}
fi
# архив файлов
cd ${pathfrom}
zip -r -q "${pathto}sites/${sitename}.${datestr}.files.zip" ./
if [ $? ]
  then
    echo "Files archieve for ${sitename} was created successfully" >> ${pathto}${logfile}
  else
    echo "There were errors while creating files archieve for ${sitename}" >> ${pathto}${logfile}
fi
echo "----------------------------------" >> ${pathto}${logfile}
# удаление всех файлов, кроме 7 последних
a=$(ls -ltr ${pathto}mysql|grep ${dbname}  |grep mysql.gz |wc -l); cd ${pathto}mysql; if ((${a} > ${storedays})); then rm $(ls -ltr ${pathto}mysql|grep ${dbname}  |grep mysql.gz |head -$(($a-$storedays))|awk '{print $9}'); fi
a=$(ls -ltr ${pathto}sites|grep ${sitename}|grep files.zip|wc -l); cd ${pathto}sites; if ((${a} > ${storedays})); then rm $(ls -ltr ${pathto}sites|grep ${sitename}|grep files.zip|head -$(($a-$storedays))|awk '{print $9}'); fi


Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: маленькое дополнение к шелл-скрипту

Сообщение Bizdelnick »

Grats, Ваш вариант тоже далеко не идеален. Что будет, если в $pathto окажется каталог с именем [да хоть таким]? А если $dbname совпадёт с именем пользователя, являющегося владельцем какого-то файла, не содержащего в имени $dbname?
Любопытное наблюдение: практически любой написанный сисадмином шелл-скрипт содержит конвейеры типа ls <...> | grep <...>, но никогда такая конструкция не работает так, как от неё ожидают.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Grats
Сообщения: 4
ОС: All

Re: маленькое дополнение к шелл-скрипту

Сообщение Grats »

Спасибо за замечания, принял во внимание, поправил.
Для того и нужны форумы, чтоб толпой истину раскопать )))

Код: Выделить всё

#!/bin/bash
dbuser=root
dbpass=123
dbname=wordpress
sitename=hosting1.local
pathto="/home/да хоть таким/"
patfrom="/home/hosting1/public_html/"
datestr=`date +%Y-%m-%d_%H:%M:%S`
logfile=daily.log
storedays=7
echo "*** ${sitename} ${datestr} ***" >> "${pathto}${logfile}"
mysqldump -u"$dbuser" -p"$dbpass" ${dbname} | gzip -c > "${pathto}mysql/${dbname}.${datestr}.mysql.gz"
if [ $? ]
  then
    echo "SQL dump for ${dbname} on ${sitename} was created successfully" >> "${pathto}${logfile}"
  else
    echo "There were errors while creating SQL dump for ${dbname} on ${sitename}" >> "${pathto}${logfile}"
fi
cd "${pathfrom}"
zip -r -q "${pathto}sites/${sitename}.${datestr}.files.zip" ./
if [ $? ]
  then
    echo "Files archieve for ${sitename} was created successfully" >> "${pathto}${logfile}"
  else
    echo "There were errors while creating files archieve for ${sitename}" >> "${pathto}${logfile}"
fi
echo "----------------------------------" >> "${pathto}${logfile}"
a=$(ls -ltr "${pathto}mysql"|awk '{print $9}'|grep ${dbname}  |grep mysql.gz |wc -l); cd "${pathto}mysql"; if ((${a} > ${storedays})); then rm $(ls -ltr ${pathto}mysql|awk '{print $9}'|grep ${dbname}  |grep mysql.gz |head -$(($a-$storedays))); fi
a=$(ls -ltr "${pathto}sites"|awk '{print $9}'|grep ${sitename}|grep files.zip|wc -l); cd "${pathto}sites"; if ((${a} > ${storedays})); then rm $(ls -ltr ${pathto}sites|awk '{print $9}'|grep ${sitename}|grep files.zip|head -$(($a-$storedays))); fi
проверил с папкой с пробелами и кириллицей, имя сайта, надеюсь, с пробелами никто вводить не будет ))
ну и пароль, если хитромудрый, можно затянуть из файла или заескейпить
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: маленькое дополнение к шелл-скрипту

Сообщение Bizdelnick »

Grats писал:
21.01.2020 18:39
поправил
Неа, не поправили. Чтобы поправить, надо избавиться от grep'ов (вайлдкарды же есть). И использовать ls для чего-то кроме подсчёта числа файлов — тоже последнее дело, он заменяет непечатаемые символы и переводы строки в именах файлов вопросительными знаками (да и там опция -l совершенно ни к чему, как, впрочем, и -tr). Тут нужен find.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Grats
Сообщения: 4
ОС: All

Re: маленькое дополнение к шелл-скрипту

Сообщение Grats »

Вот так все работает, но eval меня слегка смущает

Код: Выделить всё

wildcard_mysql=\""${pathto}mysql"\"/*\""$dbname"\"*\"mysql.gz\";
wildcard_sites=\""${pathto}sites"\"/*\""$sitename"\"*\"files.zip\";
a=$(eval find ${wildcard_mysql} -maxdepth 0 -type f | wc -l)
if ((${a} > ${storedays}))
 then eval rm $(eval find ${wildcard_mysql} -maxdepth 0 -type f -printf "%T+\|" -print | sort | awk -F"|" '{print "\""$2"\""}' | head -$(($a-$storedays)))
fi
a=$(eval find ${wildcard_sites} -maxdepth 0 -type f | wc -l)
if ((${a} > ${storedays}))
 then eval rm $(eval find ${wildcard_sites} -maxdepth 0 -type f -printf "%T+\|" -print | sort | awk -F"|" '{print "\""$2"\""}' | head -$(($a-$storedays)))
fi
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: маленькое дополнение к шелл-скрипту

Сообщение Bizdelnick »

Grats писал:
23.01.2020 11:44
Вот так все работает, но eval меня слегка смущает
Для подсчёта файлов ls вполне годится. С find насчитаете лишнего, если в пути к файлу встретится перевод строки.
a=$( ls "${pathto}mysql/"*"$dbname"*mysql.gz | wc -l )

Upd. Ан нет, тут я наврал. ls тоже выведет всё как есть, если его вывод направить в пайп. Нужен какой-то другой способ подсчёта файлов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Grats
Сообщения: 4
ОС: All

Re: маленькое дополнение к шелл-скрипту

Сообщение Grats »

Попробую через массивы, но уже в понедельник )
Бо думать есть о чем по работе, а выходные это святое )
А по существу - нефиг в файловой системе только для внутреннего пользования чудить с хитрыми именами файлов/папок
Но вопрос интересен как задача для решения.
Правда красивый скрипт по итогу будет монструозным, имхо.
PS. Текущий скрипт накосячил в именах с переводом строки, с остальным справился
PPS. Инакосячит, если использовать разделитель (в скрипте "|") в имени файла
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: маленькое дополнение к шелл-скрипту

Сообщение Bizdelnick »

Bizdelnick писал:
23.01.2020 13:49
Нужен какой-то другой способ подсчёта файлов.
Например: find "${pathto}mysql/" -name "*$dbname*mysql.gz" -print0 | tr -cd '\0' | wc -c. Но это GNU only. Более переносимые варианты есть здесь.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить