#!/bin/sh
DIRECTORIES="$1" # что именно архивируем
BACKUPDIR="$2" # где храним архив
TAR=/bin/tar # путь к исполняемому файлу tar
DM=`date +%d%b` # Дата и месяц, например 27Sep
$TAR -czf $BACKUPDIR/$DM.tar.gz $DIRECTORIES
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
function extract()
{
if [ -f "$1" ]; then
case "$1" in
*.tar.bz2) tar xjf "$1";;
*.tar.gz) tar xzf "$1";;
*.tar.Z) tar xzf "$1";;
*.bz2) bunzip2 "$1";;
*.rar) unrar x "$1";;
*.gz) gunzip "$1";;
*.jar) unzip "$1";;
*.tar) tar xf "$1";;
*.tbz2) tar xjf "$1";;
*.tgz) tar xzf "$1";;
*.zip) unzip "$1";;
*.Z) uncompress "$1";;
*) echo "'$1' cannot be extracted.";;
esac
else
echo "'$1' is not a file."
fi
}
[00:05]deb:~/pr/test $ vi re.sh
[00:05]deb:~/pr/test $ chmod +x re.sh
[00:05]deb:~/pr/test $ ls
re.sh два раз три файл
[00:05]deb:~/pr/test $ ./re.sh
[00:05]deb:~/pr/test $ ls
dva fajl raz re.sh tri
и вуаля все файлы переименованы.
так же можно запускать из любой другой директории (чтобы не таскать за собой всюду этот файл), только в этом случае вместо ./ перед re.sh нужно указывать полный путь к нему.
зы отрежьте эти 2 сообщения от этой темы.
Вот, из старого откопал пятнашки на баш . А что? вполне полезный скрипт
Код:
#!/bin/bash
# Author: Subj (subjrs@gmail.com)
#
###
mass=("_1" "_2" "_3" "_4" "_5" "_6" "_7" "_8" "_9" "10" "11" "12" "13" "14" "15" "__")
label=16
###
function cecho
{
red='\E[31;48m'
echo -en "\033[1m"$red
echo -en $1"\033[0m"
tput sgr0
}
###
function tprint
{
clear
echo '-------------'
for i in `seq 1 4`; do
echo -n '|'
for j in `seq 1 4`;do
(( c=$i*4-(4-$j)-1 ))
c1=${mass[$c]}
(( c++ ))
if [ $c -eq $label ]; then
cecho $c1
else
echo -n $c1
fi
echo -n '|'
done
echo
done
echo '-------------'
}
###
function crnd
{
count=0
while [ : ]; do
rnd=$RANDOM
let "rnd %= 16 "
(( rnd++ ))
fm="$rnd"
if [ $rnd -eq 16 ]; then
fm="__"
elif [ $rnd -lt 10 ]; then
fm="_"$rnd
fi
for i in `seq 0 $count`; do
if [ "${mass[$i]}" == "$fm" ]; then
continue 2
fi
done
mass[$count]=$fm
(( count++ ))
if [ $count -eq 16 ]; then
break
fi
done
}
###
# Begin
if [ "$1" == "--help" ]; then
echo "n - New game"
echo "z - Move"
echo "q - Quit"
exit 0
fi
###
crnd
tprint
char=""
###
# Main loop
while [ "$char" != "q" ]; do
read -s -n1 char
case "$char" in
"A" )
if [ $label -gt 4 ]; then
(( label-=4 ))
fi
# Up
;;
"B" )
if [ $label -lt 13 ]; then
(( label+=4 ))
fi
# Down
;;
"C" )
if [ $label -ne 16 ]; then
(( label++ ))
fi
# Right
;;
"D" )
if [ $label -ne 1 ]; then
(( label-- ))
fi
# Left
;;
"n"|"N" )
crnd
;;
"z"|"Z" )
###
# Left
if [ $label -ne 1 -a $label -ne 5 -a $label -ne 9 -a $label -ne 13 ]; then
if [ ${mass[$(( $label-1-1 ))]} = "__" ]; then
mass[$(( $label-1-1 ))]=${mass[$(( $label-1 ))]}
mass[$(( $label-1 ))]="__"
fi
fi
# Right
if [ $label -ne 4 -a $label -ne 8 -a $label -ne 12 -a $label -ne 16 ]; then
if [ ${mass[$(( $label+1-1 ))]} = "__" ]; then
mass[$(( $label+1-1 ))]=${mass[$(( $label-1 ))]}
mass[$(( $label-1 ))]="__"
fi
fi
# Up
if [ $label -gt 4 ]; then
if [ ${mass[$(( $label-4-1 ))]} = "__" ]; then
mass[$(( $label-4-1 ))]=${mass[$(( $label-1 ))]}
mass[$(( $label-1 ))]="__"
fi
fi
# Down
if [ $label -lt 13 ]; then
if [ ${mass[$(( $label+4-1 ))]} = "__" ]; then
mass[$(( $label+4-1 ))]=${mass[$(( $label-1 ))]}
mass[$(( $label-1 ))]="__"
fi
fi
;;
###
esac
tprint
done
#
exit 0
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Всем привет! А нет ли скриптика, который бы позволял в определенное время брать определенный файлик и либо отсылать его по сетке на какой-нить IP, а лучше на почту внутреннюю? А то у нас в конторе стоит чат и шефы хотят видеть всю внутренюю переписку, брать им лог, да сливать на почту
#!/bin/bash
if [ `whoami` == "root" ]; then
if [ -n "$1" ]; then
apt-key adv --keyserver subkeys.pgp.net --recv-keys $1
else
echo Please specify key
fi
else
echo Only root can run this script
fi
Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?
Shell
t:~$ cat ~/bin/rmemprydirs
#!/bin/bash
findemtpydirs() {
find "$1" -type d | while read i; do
[ -n "$(ls -A $i)" ] || echo "$i"
done
}
dir="$1"
[ -n "$dir" ] || dir=.
while findemtpydirs "$dir" | xargs rmdir 2>/dev/null; do :;done
Смысл, думаю, понятен из названия: удаление всех пустых каталогов, начиная от заданного (по умолчанию -- от текущего). Работает для любого уровня вложенности; т.е. при структуре вида
Known bug: Последний проход внешнего цикла всегда выдаёт сообщение "rmdir: пропущен операнд" (затем там и перенаправление stderr). Как красиво исправить -- не знаю, т.к., если загнать rmdir внутрь цикла, результат функции findemptydirs ему придётся передавать весь скопом в командной строке, а "это ведь не годится -- может не поместиться". Правда, особенно я об этом и не думал: работает -- и ладно. Но рекомендации приветствуются.
$ if sudo true; then :; fi
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for t:
Сработает только при ALL, думается, т.к. добавлять /bin/true явным образом, думаю, никто не будет. А ALL, на мой взгляд, не самый употребимый вариант.
у меня в системе sudo не установлен. и вообще я особого смысла в нем не вижу.
Смысл в безопасности. Если говорить об однопользовательской машине, то sudo обычно настраивается на конкретные команды, и ничего другого запустить просто не даст, в отличие от su -c. Это первое. Второе -- sudo может вести логи всех действий. В целом -- вероятность ошибки значительно снижается, а в случае, если она всё-таки случится, по логам можно гораздо легче её исправить.
#!/bin/bash
TMP_DIR="$HOME/tmp"
DAYS=7
find $TMP_DIR -type f -atime +$DAYS -delete
find $TMP_DIR -mindepth 1 -type d -empty -delete
Прописывается в cron (у меня стоит на ежедневный запуск). Только этот скрипт считает время не с момента появления в папке, а с момента последнего обращения.
Только этот скрипт считает время не с момента появления в папке, а с момента последнего обращения.
Можно заменить atime на mtime -- будет с момента последнего изменения. А момент создания отследить средствами файловой системы, увы, невозможно. Время, известное как ctime, -- это на самом деле время последнего изменения служебной информации о файле, и изменяется оно (вообще говоря) ещё чаще чем mtime.
при попытке воспользоваться скриптом для переименования русских файлов в транслит , вот что появляеться:
-bash: ./rename: Permission denied
Права на папку выставил, на скрипт тоже
подскажите в чем может быть проблема?
при попытке воспользоваться скриптом для переименования русских файлов в транслит , вот что появляеться:
-bash: ./rename: Permission denied
Права на папку выставил, на скрипт тоже
подскажите в чем может быть проблема?
Возникла необходимость ежедневно бэкапить каталог. По задумке в сети стоит машина специально под бэкапы.
В теме нашел скрипт для бэкапа, но его надо допилить. Необходимо чтоб каждый день скажем в 00:00 сервер архивировал папку, коннектился по ssh к машине backup и сливал на нее файлик. Реализуемо? )
Возникла необходимость ежедневно бэкапить каталог. По задумке в сети стоит машина специально под бэкапы.
В теме нашел скрипт для бэкапа, но его надо допилить. Необходимо чтоб каждый день скажем в 00:00 сервер архивировал папку, коннектился по ssh к машине backup и сливал на нее файлик. Реализуемо? )
Заранее благодарен )
не понял вопрос.
вы это можете сами, ручками в консоли сделать? подойти к серверу, в 00:00, и набрать команды для архивации, и для отправки?
а почему не можете их записать в файл?..
Во-первых, не "итого", а "total", а может, на каком-нибудь другом языке будет, во-вторых, это работает неправильно. Подвох заключается в том, что пустым каталогом должен считаться не только действительно пустой каталог, но и каталог, который содержит только пустые подкаталоги.
Подвох заключается в том, что пустым каталогом должен считаться не только действительно пустой каталог, но и каталог, который содержит только пустые подкаталоги.
это не баг, а фича
насколько я знаю, rmdir не умеет удалять каталоги с пустыми подкаталогами, потому вам придётся сначала удалить пустые, а потом - опять удалять пустые. Вы в любом случае так будете делать, что find, что rf -R...
Неправильная фича. Я, думаю вполне обоснованно, предполагаю, что после запуска скрипта удаления пустых каталогов их не останется. В Вашем случае это не так.