Полезные скрипты (или ПО для начинающих...)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Полезные скрипты

Сообщение yamah »

На форуме нашел скрипт для создания бэкапов.

Немного его облегчил, ибо мне не нужен такой навороченный интелект. Вдобавок сделал эго более универсальным.

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

#!/bin/sh

DIRECTORIES="$1" # что именно архивируем
BACKUPDIR="$2" # где храним архив
TAR=/bin/tar # путь к исполняемому файлу tar
DM=`date +%d%b` # Дата и месяц, например 27Sep

$TAR -czf $BACKUPDIR/$DM.tar.gz $DIRECTORIES
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Полезные скрипты

Сообщение SLEDopit »

рылся в сети, увидел неплохую функцию для .bashrc по распаковыванию архивов)

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

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
}
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.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Полезные скрипты

Сообщение SLEDopit »

тут вроде еще не видел такого. разбивка flac (первый скрипт) и конвертирование ape 2 flac (второй скрипт)

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

#!/bin/bash
#Usage ./script file.cue file.flac
if  [ "$1" != *.ape ]
then
echo Usage ./script file.ape file.flac
exit
fi
if  [ "$2" != *.flac ]
then
echo Usagei ./script file.ape file.flac
exit
fi
cuebreakpoints $1 | shnsplit -o flac $2
cuetag $1 split-track*.flac
echo Done.

Код:

#!/bin/bash # ----------------------------------------------------------------------------- # # App Title: convtoflac.sh # App Version: 1.1 # Author: Jared Breland <jbreland@legroom.net> # Homepage: http://www.legroom.net/mysoft # # Script Function: # Convert losslessly compressed audio file to FLAC format, preserving tags # Currently supports FLAC, Monkey's Audio (APE), Shorten, WAV, and WavPack # # Instructions: # Ensure that all programs are properly set in "Setup environment" # # Caveats: # Transcoded files will retain original file name, but use .flac extension # The one exception is for FLAC input files - the original input file will # be renamed <name>_old.flac, and the transcoded file will be named # <name>.flac. # # Requirements: # The following programs must be installed and available # sed (http://sed.sourceforge.net/) # used to handle case sensitivity and tag processing # flac/metaflac (http://flac.sourceforge.net/) # used to create and tag new FLAC files # mac (http://sourceforge.net/projects/mac-port/) # used to decompress APE files # apeinfo (http://www.legroom.net/mysoft) # used to read tags from APE files # shorten (http://etree.org/shnutils/shorten/) # used to decompress Shorten files # wvunpack (http://www.wavpack.com/) # used to decompress WavPack files # # Please visit the application's homepage for additional information. # # ----------------------------------------------------------------------------- # Setup environment PROG=`basename $0` SED=/bin/sed FLAC=/usr/bin/flac METAFLAC=/usr/bin/metaflac MAC=/usr/bin/mac APEINFO=/bin/apeinfo SHORTEN=/usr/bin/shorten WVUNPACK=/usr/bin/wvunpack DELETE="" COMPRESS="8" # Function to display usage information function warning() { echo -ne "Usage: $PROG [-h] [-cN] [-d|-p] <filename>\n" echo -ne "Convert losslessly compressed audio file to FLAC format, preserving tags\n" echo -ne "\nOptions:\n" echo -ne " -h Display this help information\n" echo -ne " -cN Set FLAC compression level, where N = 0 (fast) - 8 (best); default is 8\n" echo -ne " -d Delete file after conversion\n" echo -ne " -p Prompt to delete file after conversion\n" echo -ne "\nSupported input formats:\n" echo -ne " FLAC (.flac)\n" echo -ne " Monkey's Audio (.ape)\n" echo -ne " Shorten (.shn)\n" echo -ne " WAV (.wav)\n" echo -ne " WavPack (.wv)\n" exit } # Function to parse wvunpack output to find tags and convert to VORBISCOMMENT function wvtags() { TAGS2=${TAGS}.wv $SED -i "/ = /w${TAGS2}" $TAGS $SED -i "s/ = /=/" $TAGS2 $SED -i 's/\(.*\)=/\U\1=/' $TAGS2 $SED -i "s/TRACK=/TRACKNUMBER=/;s/YEAR=/DATE=/;s/COMMENT=/DESCRIPTION=/" $TAGS2 mv $TAGS2 $TAGS } # Process arguments if [[ $# -eq 0 ]]; then warning else while [ $# -ne 0 ]; do [ "$1" == "-h" ] && warning [ "$1" == "-d" ] && DELETE=force [ "$1" == "-p" ] && DELETE=prompt [ "${1:0:2}" == "-c" ] && COMPRESS="${1:2}" FILE=$1 shift done fi # Validate COMPRESS setting if [[ "$COMPRESS" != [0-8] ]]; then echo "Error: FLAC compression level must be between 0 and 8" exit fi # Determine file type and base filename NAME=${FILE%.*} EXT=`echo "${FILE##*.}" | $SED 's/\(.*\)/\L\1/'` # Exit if wrong file passed if [[ "$EXT" != "ape" && "$EXT" != "flac" && "$EXT" != "shn" && "$EXT" != "wav" && "$EXT" != "wv" ]]; then echo "Error: $FILE is not a supported input format" exit fi # Verify apps exist if [ ! -e $FLAC ]; then echo "Error: cannot find flac binary" MISSING=true fi if [ ! -e $METAFLAC ]; then echo "Error: cannot find metaflac binary" MISSING=true fi if [[ "$EXT" == "ape" && ! -e $APEINFO ]]; then echo "Error: cannot find apeinfo binary" MISSING=true fi if [[ "$EXT" == "ape" && ! -e $MAC ]]; then echo "Error: cannot find mac binary" MISSING=true fi if [[ "$EXT" == "shn" && ! -e $SHORTEN ]]; then echo "Error: cannot find shorten binary" MISSING=true fi if [[ "$EXT" == "wv" && ! -e $WVUNPACK ]]; then echo "Error: cannot find wvunpack binary" MISSING=true fi [ -n "$MISSING" ] && exit # Original FLAC file will need to be renamed - abort of file already exists if [[ "$EXT" == "flac" ]]; then if [[ -e "${NAME}_old.flac" ]]; then echo -e "Error: \"${NAME}_old.flac\" already exists: could not rename input file" exit else mv -i "$FILE" "${NAME}_old.flac" FILE="${NAME}_old.flac" fi fi # Transcode file if [ "$EXT" == "ape" ]; then $MAC "$FILE" - -d | $FLAC -$COMPRESS -s -o "$NAME.flac" - elif [ "$EXT" == "flac" ]; then $FLAC -d "$FILE" -c | $FLAC -$COMPRESS -s -o "$NAME.flac" - elif [ "$EXT" == "shn" ]; then $SHORTEN -x "$FILE" - | $FLAC -$COMPRESS -s -o "$NAME.flac" - elif [ "$EXT" == "wav" ]; then $FLAC -$COMPRESS -o "$NAME.flac" "$FILE" elif [ "$EXT" == "wv" ]; then $WVUNPACK "$FILE" -o - | $FLAC -$COMPRESS -s -o "$NAME.flac" - fi # Abort if transcode failed if [ $? -ne 0 ]; then echo -e "\nError: \"$FILE\" could not be converted to a FLAC file" if [[ "$EXT" == "flac" ]]; then mv "$FILE" "$NAME.flac" fi exit fi # Copy tags if [[ "$EXT" == "ape" || "$EXT" == "flac" || "$EXT" == "wv" ]]; then echo -ne "\nCopying tags..." TAGS=/tmp/$PROG.$RANDOM.tags if [ "$EXT" == "ape" ]; then $APEINFO -t "$FILE" >$TAGS elif [ "$EXT" == "flac" ]; then $METAFLAC --export-tags-to=$TAGS "$FILE" elif [ "$EXT" == "wv" ]; then $WVUNPACK -qss "$FILE" >$TAGS wvtags fi if [[ $? -ne 0 || ! -s "$TAGS" ]]; then echo -ne "\nWarning: tags could not be read from \"$FILE\"\n" else $METAFLAC --import-tags-from=$TAGS "$NAME.flac" if [[ $? -ne 0 ]]; then echo -ne "\nWarning: tags could not be written to \"$NAME.flac\"\n" else echo -ne " complete\n" fi fi rm $TAGS fi # Delete old file if [ "$DELETE" == "prompt" ]; then echo -ne "\nDelete \"$FILE\"? " read -e DELPROMPT if [[ "$DELPROMPT" == "y" || "$DELPROMPT" == "Y" ]]; then DELETE=force fi fi echo -ne "\nConversion complete - " if [ "$DELETE" == "force" ]; then rm "$FILE" echo -ne "deleted" else echo -ne "kept" fi echo -ne " \"$FILE\"\n"
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.
Спасибо сказали:
ford1813
Сообщения: 383
ОС: Slackware

Re: Полезные скрипты

Сообщение ford1813 »

http://deadlive.ru/?p=12

По ссылке вы можете найти скрипты для быстрого запуска apache в окружении chroot на slackware 12.2 .
Контакты для связи:

E-mail: ford1813@gmail.com

Telegram: @ford1813
Спасибо сказали:
klu41k
Сообщения: 34

Re: Полезные скрипты

Сообщение klu41k »

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

Re: Полезные скрипты

Сообщение SLEDopit »

klu41k писал(а):
17.01.2009 23:57
пожалуйста опишите детально как пользоваться этим скриптом?:
Переименование русских имен файлов в транслит
копируйте все из того поста в файл. назовем его re.sh, делаем его исполняемым и запускаем. все предельно просто.

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

[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 сообщения от этой темы.
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.
Спасибо сказали:
klu41k
Сообщения: 34

Re: Полезные скрипты

Сообщение klu41k »

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

Re: Полезные скрипты

Сообщение SLEDopit »

klu41k писал(а):
19.01.2009 15:07
но при попытке переименования вот что получается:
ну это естественно. скрипт немного неверно написан(с пробелами работать не умеет). вот подправил, по идее теперь все должно быть хорошо:

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

#!/bin/sh
# this script has been written by Eddy
#
#               rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
for Name in *
do
    echo $Name ----
    Newname=`echo "$Name"|sed \
    -e "y/йукенгзхфывапролдэсмитбЙУКЕНГЗХФЫВАПРОЛДЭСМИТБ/jukengzhfyvaproldesmitbJUKENGZHFYVAPROLDESMITB/"\
    -e "s/ц/tz/g"       \
    -e "s/ш/sh/g"       \
    -e "s/щ/sch/g"      \
    -e "s/ж/zh/g"       \
    -e "s/ч/ch/g"       \
    -e "s/ю/yu/g"       \
    -e "s/я/ya/g"       \
    -e "s/Ц/TZ/g"       \
    -e "s/Ш/SH/g"       \
    -e "s/Щ/SCH/g"      \
    -e "s/Ж/ZH/g"       \
    -e "s/Ч/CH/g"       \
    -e "s/Ю/YU/g"       \
    -e "s/Я/YA/g"       \
    -e "s/ъ//g"         \
    -e "s/ь//g"         \
    -e "s/Ъ//g"         \
    -e "s/Ь//g"`
    echo $Name - $Newname
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
        echo -e "$Name   ->    $Newname\r\c"
    fi
    if [ -d "$Newname" ]; then
        cd "$Newname"
        echo -e "\n\nDiving into $Newname"
        rename_translit
        cd ../
    fi
done
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.
Спасибо сказали:
klu41k
Сообщения: 34

Re: Полезные скрипты

Сообщение klu41k »

Спасибо, работает
Админы прикрепите это к скриптам
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Полезные скрипты

Сообщение Subj »

Вот, из старого откопал пятнашки на баш :). А что? вполне полезный скрипт

Код:

#!/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
Вложения

[Расширение sh было запрещено, вложение больше недоступно.]

Building better software with Ada
Спасибо сказали:
Platon_art
Сообщения: 8
ОС: Linux Mandriva

Re: Полезные скрипты

Сообщение Platon_art »

Всем привет! А нет ли скриптика, который бы позволял в определенное время брать определенный файлик и либо отсылать его по сетке на какой-нить IP, а лучше на почту внутреннюю? А то у нас в конторе стоит чат и шефы хотят видеть всю внутренюю переписку, брать им лог, да сливать на почту
Спасибо сказали:
Аватара пользователя
Палач
Сообщения: 624
Статус: ASUS Eee 1000HE
ОС: Gentoo ~x86 / Simply 5.0

Re: Полезные скрипты

Сообщение Палач »

Platon_art писал(а):
26.01.2009 05:13
который бы позволял в определенное время брать определенный файлик и либо отсылать его по сетке на какойнить IP

man cron
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Полезные скрипты

Сообщение SLEDopit »

скрипт нужен не часто, но время от времени бывает весьма полезным :)
добавление ключей доверия от репов для деб систем.

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

#!/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
updated 14.02. thanks to sash-kan
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.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?

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

Смысл, думаю, понятен из названия: удаление всех пустых каталогов, начиная от заданного (по умолчанию -- от текущего). Работает для любого уровня вложенности; т.е. при структуре вида

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

.
\--a
  |--b
  |  |--c
  |  ...
  |  \--d
  |      \--1.htm
  ...
  \--e
     |--f
     ...
     \--g
все каталоги кроме a, b и d будут удалены.

Known bug: Последний проход внешнего цикла всегда выдаёт сообщение "rmdir: пропущен операнд" (затем там и перенаправление stderr). Как красиво исправить -- не знаю, т.к., если загнать rmdir внутрь цикла, результат функции findemptydirs ему придётся передавать весь скопом в командной строке, а "это ведь не годится -- может не поместиться". Правда, особенно я об этом и не думал: работает -- и ладно. Но рекомендации приветствуются.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Полезные скрипты

Сообщение watashiwa_daredeska »

t.t писал(а):
05.02.2009 13:10
Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?
Это чем-то отличается от find $DIR -mindepth 1 -type d -empty -delete ?
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Полезные скрипты

Сообщение watashiwa_daredeska »

SLEDopit писал(а):
05.02.2009 03:13
добавление ключей доверия от репов для деб систем.
Я бы поменял его так:

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

#!/bin/bash
if sudo true; then
        if [ -n "$1" ]; then
                gpg --keyserver subkeys.pgp.net --recv-keys $1
                gpg --armor --export $1 | sudo apt-key add -
        else
                echo Please specify key
        fi
fi
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

watashiwa_daredeska писал(а):
05.02.2009 15:33
t.t писал(а):
05.02.2009 13:10
Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?
Это чем-то отличается от find $DIR -mindepth 1 -type d -empty -delete ?
По идее не должно. У меня был битый man find (к нему-то я в первую очередь и обратился). Переустановил. Спасибо.

watashiwa_daredeska писал(а):
05.02.2009 15:48

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

#!/bin/bash
if sudo true; then
[...]
Не очень красиво:

Shell

$ 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, на мой взгляд, не самый употребимый вариант.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Полезные скрипты

Сообщение SLEDopit »

watashiwa_darede... писал(а):
05.02.2009 15:48
Я бы поменял его так:
у меня в системе sudo не установлен. и вообще я особого смысла в нем не вижу. надо админить - юзаю su, нужно выполнить одну команду - su -c 'command'
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.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

SLEDopit писал(а):
06.02.2009 13:18
у меня в системе sudo не установлен. и вообще я особого смысла в нем не вижу.
Смысл в безопасности. Если говорить об однопользовательской машине, то sudo обычно настраивается на конкретные команды, и ничего другого запустить просто не даст, в отличие от su -c. Это первое. Второе -- sudo может вести логи всех действий. В целом -- вероятность ошибки значительно снижается, а в случае, если она всё-таки случится, по логам можно гораздо легче её исправить.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Ins
Сообщения: 47
ОС: interested all unix systems

Re: Полезные скрипты

Сообщение Ins »

А возможно написать скрипт, который будет фоном висеть и удалять файлы, засидевшиеся в папке, скажем, больше 5 дней с момента их появления там? :)
laptop: Ubuntu 8.04 work: openSuSE 11.1, Debian 5.01 lenny
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Полезные скрипты

Сообщение Ленивая Бестолочь »

Это чем-то отличается от find $DIR -mindepth 1 -type d -empty -delete ?


find выдаст в начале каталоги верхнего уровня, которые будет не удалить, т.к. они не пустые.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Полезные скрипты

Сообщение watashiwa_daredeska »

Ins писал(а):
12.02.2009 16:14
А возможно написать скрипт, который будет фоном висеть и удалять файлы, засидевшиеся в папке, скажем, больше 5 дней с момента их появления там? :)

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

#!/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 (у меня стоит на ежедневный запуск). Только этот скрипт считает время не с момента появления в папке, а с момента последнего обращения.

Ленивая Бестолочь писал(а):
12.02.2009 17:40
find выдаст в начале каталоги верхнего уровня, которые будет не удалить, т.к. они не пустые.
Этот find вообще ничего не выдает -- сразу удаляет. И удаляет вполне правильно. Проверено.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Немного добавлю:
watashiwa_daredeska писал(а):
13.02.2009 01:17
Только этот скрипт считает время не с момента появления в папке, а с момента последнего обращения.
Можно заменить atime на mtime -- будет с момента последнего изменения. А момент создания отследить средствами файловой системы, увы, невозможно. Время, известное как ctime, -- это на самом деле время последнего изменения служебной информации о файле, и изменяется оно (вообще говоря) ещё чаще чем mtime.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
klu41k
Сообщения: 34

Re: Полезные скрипты

Сообщение klu41k »

при попытке воспользоваться скриптом для переименования русских файлов в транслит , вот что появляеться:
-bash: ./rename: Permission denied
Права на папку выставил, на скрипт тоже
подскажите в чем может быть проблема?
Спасибо сказали:
Аватара пользователя
oper777
Сообщения: 411
ОС: gentoo
Контактная информация:

Re: Полезные скрипты

Сообщение oper777 »

klu41k писал(а):
09.05.2009 10:23
при попытке воспользоваться скриптом для переименования русских файлов в транслит , вот что появляеться:
-bash: ./rename: Permission denied
Права на папку выставил, на скрипт тоже
подскажите в чем может быть проблема?


Покажи ls -l ./rename

И вывод команды mount заодно.
Спасибо сказали:
Аватара пользователя
Ins
Сообщения: 47
ОС: interested all unix systems

Re: Полезные скрипты

Сообщение Ins »

Возникла необходимость ежедневно бэкапить каталог. По задумке в сети стоит машина специально под бэкапы.
В теме нашел скрипт для бэкапа, но его надо допилить. Необходимо чтоб каждый день скажем в 00:00 сервер архивировал папку, коннектился по ssh к машине backup и сливал на нее файлик. Реализуемо? )

Заранее благодарен )
laptop: Ubuntu 8.04 work: openSuSE 11.1, Debian 5.01 lenny
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Полезные скрипты

Сообщение drBatty »

Ins писал(а):
29.05.2009 05:27
Возникла необходимость ежедневно бэкапить каталог. По задумке в сети стоит машина специально под бэкапы.
В теме нашел скрипт для бэкапа, но его надо допилить. Необходимо чтоб каждый день скажем в 00:00 сервер архивировал папку, коннектился по ssh к машине backup и сливал на нее файлик. Реализуемо? )

Заранее благодарен )

не понял вопрос.
вы это можете сами, ручками в консоли сделать? подойти к серверу, в 00:00, и набрать команды для архивации, и для отправки?
а почему не можете их записать в файл?..

t.t писал(а):
05.02.2009 13:10
Набросал только что "для внутренних нужд", но подумал: может ещё кому пригодится?

список пустых каталогов можно получить так:

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

$ ls -lR *|sed -rn '/:$/h;/^итого 0$/{G;s/.*\n(.*):$/\1/p}'

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

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Полезные скрипты

Сообщение watashiwa_daredeska »

drBatty писал(а):
29.05.2009 07:52
список пустых каталогов можно получить так
Во-первых, не "итого", а "total", а может, на каком-нибудь другом языке будет, во-вторых, это работает неправильно. Подвох заключается в том, что пустым каталогом должен считаться не только действительно пустой каталог, но и каталог, который содержит только пустые подкаталоги.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: Полезные скрипты

Сообщение drBatty »

watashiwa_darede... писал(а):
29.05.2009 09:06
Во-первых, не "итого", а "total", а может, на каком-нибудь другом языке будет,

подправьте немного. лень думать. у меня - работает. можно и мульти версию написать...

watashiwa_darede... писал(а):
29.05.2009 09:06
Подвох заключается в том, что пустым каталогом должен считаться не только действительно пустой каталог, но и каталог, который содержит только пустые подкаталоги.

это не баг, а фича :)
насколько я знаю, rmdir не умеет удалять каталоги с пустыми подкаталогами, потому вам придётся сначала удалить пустые, а потом - опять удалять пустые. Вы в любом случае так будете делать, что find, что rf -R...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Полезные скрипты

Сообщение watashiwa_daredeska »

drBatty писал(а):
29.05.2009 10:05
это не баг, а фича
Неправильная фича. Я, думаю вполне обоснованно, предполагаю, что после запуска скрипта удаления пустых каталогов их не останется. В Вашем случае это не так.
drBatty писал(а):
29.05.2009 10:05
Вы в любом случае так будете делать, что find, что rf -R...
См. Полезные скрипты
Спасибо сказали:
Ответить