- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть список путей до архивов бекапов в файле 1.txt
/opt/ftptempdir/nov/nov-2017-05-18.tar.gz
/opt/ftptempdir/nov/nov-2017-05-19.tar.gz
/opt/ftptempdir/nov/nov-2017-05-20.tar.gz
/opt/ftptempdir/nov/nov-2017-05-21.tar.gz
/opt/ftptempdir/nov/nov-2017-05-22.tar.gz
/opt/ftptempdir/nov/nov-2017-05-23.tar.gz
/opt/ftptempdir/nov/nov-2017-05-24.tar.gz
/opt/ftptempdir/admin/admin-2017-05-21.tar.gz
/opt/ftptempdir/admin/admin-2017-05-22.tar.gz
/opt/ftptempdir/admin/admin-2017-05-23.tar.gz
/opt/ftptempdir/admin/admin-2017-05-24.tar.gz
где nov и admin - это название папок имен пользователей isp - их может много и т.д.
нужно удалить из файла последние 3 строки архивов каждого пользователя
удалить последние 3 строки из конца файла можно командой
sed -n -e :a -e '1,3!{P;N;D;};N;ba' 1.txt
а как же удалить по каждому пользователю ? подскажите пожалуйста
Файл 1.txt рядом со сриптом
Проверьте, чтобы шебанг был правильный, у меня под FreeBSD.
не работает - падает
sed: неверный ключ — «2»
Перепишите строчку
cat 1.txt | grep $2 | sort -u | sed ${QUANTITY}q
как
cat 1.txt | grep $2 | sort -u | sed "${QUANTITY}"q
---------- Добавлено 25.05.2017 в 11:44 ----------
Если будут ещё проблемы, сразу напишите, что за система.
---------- Добавлено 25.05.2017 в 12:01 ----------
Можно так же переписать
if [ "${CURRENT_USER}" != "${LAST_USER}" -a ${LAST_USER} ]; then
как
if [ "${CURRENT_USER}" != "${LAST_USER}" -a -n "${LAST_USER}" ]; then
Теперь и в cygwin нормально работает.
---------- Добавлено 25.05.2017 в 12:20 ----------
Получается
DenisVS да спасибо! все работает - это я ошибся при копировании.
цель была смонтировать удаленный ftp через curlftpfs (на который льются бекапы) в локальную папку - и вывести список архивов в 1.txt , вывести список котор надо удалить в 2.txt и грохнуть
mtime не походит - потому что если бекапы перестанут делаться по какой то причине - они будут все удалены - а тут полюбому останется 3
но если бекапов уже храниться 3 - то sed получает 0 и 2.txt пустой
/opt/test/1.sh: line 14: [: предполагается что будет использован аргумент
sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0
sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0
rm: пропущен операнд
По команде «rm --help» можно получить дополнительную информацию
хотя на следующий день будет 4 - и это неважно
а как вывести вывод этого скрипта в 2.txt - кроме как 1.sh > 2.txt ?
В самом скрипте перенаправить в 2 местах
echo ${READY_STRING} >> 2.txt
Перед этим сделать
touch 2.txt
в итоге получился скриптик - заходит на ftp и ротирует бекапы -оставляет последние 3
touch ~/.netrc
chmod 600 ~/.netrc
cat ~/.netrc
machine 192.168.1.1
login user
password pass
#!/bin/bash
### yum/apt-get install curlftpfs
function die () {
echo >&2 "$@"
exit 1
}
XARGS="$(which xargs)"
CAT="$(which cat)"
SED="$(which sed)"
FIND="$(which find)"
BACKUPDIR=/opt/testbak
FTPHOST[0]="192.168.1.1"
#FTPUSER[0]="login"
#FTPPASS[0]="pass"
FTPDIR[0]="bak"
FTPTEMPDIR[0]="/opt/ftptempdir"
if [[ ! -d $BACKUPDIR ]]
then
mkdir -p "$BACKUPDIR"
fi
if [[ ! -d $FTPTEMPDIR ]]
then
mkdir -p "$FTPTEMPDIR"
fi
cd $BACKUPDIR
for KEY in "${!FTPHOST[@]}"; do
mount curlftpfs#ftp://${FTPHOST[$KEY]}/${FTPDIR[$KEY]}/ ${FTPTEMPDIR[$KEY]} -t fuse -o rw,noauto,default_permissions,user,disable_eprt,_netdev -o fsname=ftpbak
if [[ $? -gt 0 ]];then
echo "монтирование не удачно, выход."
exit 1
fi
echo "монтирование удачно"
#строим полный список файлов бекапа
$FIND ${FTPTEMPDIR[$KEY]} -name "*.tar.gz" -type f | sort -n > $BACKUPDIR/1.txt
touch $BACKUPDIR/2.txt
#удаляем из списка последние 3 бекапа
cut_num() {
let QUANTITY=$1-3 > /dev/null
cat $BACKUPDIR/1.txt | grep $2 | sort -u | sed "${QUANTITY}"q
}
FILE_CONT=`cat $BACKUPDIR/1.txt| sort -u`
SAVEIFS=$IFS
IFS='
'
let COUNT=0 > /dev/null
for CURRENT_FILE in ${FILE_CONT}; do
CURRENT_USER=`echo ${CURRENT_FILE} | awk -F\/ '{print $4}'`
if [ "${CURRENT_USER}" != "${LAST_USER}" -a -n "${LAST_USER}" ]; then
CUTTED=`cut_num ${COUNT} ${LAST_USER}` > /dev/null
for READY_STRING in ${CUTTED}; do
echo ${READY_STRING} >> $BACKUPDIR/2.txt
done
let COUNT=0 > /dev/null
fi
let COUNT=${COUNT}+1 > /dev/null
LAST_USER=${CURRENT_USER}
done
CUTTED=`cut_num ${COUNT} ${CURRENT_USER}` > /dev/null
IFS=$SAVEIFS
for READY_STRING in ${CUTTED}; do
echo ${READY_STRING} >> $BACKUPDIR/2.txt
done
#удаляем устаревшие бекапы
$CAT $BACKUPDIR/2.txt | $XARGS rm
rm -f $BACKUPDIR/1.txt
rm -f $BACKUPDIR/2.txt
# отмонтируем FTPTEMPDIR
umount ${FTPTEMPDIR[$KEY]}
done