я знаю. я сделал список пустых каталогов. Оберните строку в цикл, и у вас будет удаление всех пустых в вашем смысле(и тех что в правду пустые, и тех, в которых только пустые). цикл можно сделать как do done, или командой t sed.watashiwa_darede... писал(а): ↑29.05.2009 11:03Неправильная фича. Я, думаю вполне обоснованно, предполагаю, что после запуска скрипта удаления пустых каталогов их не останется. В Вашем случае это не так.
Полезные скрипты (или ПО для начинающих...)
Модератор: Модераторы разделов
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
Re: Полезные скрипты
Подскажите скрипт для поиска в одном каталоге состоящего из rpm тех которые дублируются названием но не версией. В стиле чтоб находило и показывало дубликаты например:
kdegames4-core-4.2.4-0.1mdv2009.1.i586 и kdegames4-core-4.2.4-0.6mdv2009.1.i586
kdegames4-core-4.2.4-0.1mdv2009.1.i586 и kdegames4-core-4.2.4-0.6mdv2009.1.i586
"Я просто пытаюсь растить свой сад и не портить прекрасный вид.
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.
http://zooom.com.ua/
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.
http://zooom.com.ua/
Re: Полезные скрипты
начать можно с этого:
$ ls | sed 's/^\(.*\)\(-[[:digit:]].*\)/\1\2 \1/' | sort | uniq -f 1 -D | sed 's/ .*//' | less
$ ls | sed 's/^\(.*\)\(-[[:digit:]].*\)/\1\2 \1/' | sort | uniq -f 1 -D | sed 's/ .*//' | less
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
Re: Полезные скрипты
sash-kan Вы прям кудесник. Спасибо большое всё работает. И как после таких коанов можно не наслаждаться Linuxom
"Я просто пытаюсь растить свой сад и не портить прекрасный вид.
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.
http://zooom.com.ua/
И начальник заставы поймёт меня и беспечный рыбак простит" Б.Г.
http://zooom.com.ua/
Re: Полезные скрипты
Декодирование латеховского файла, получающегося после Open Office'овского экспорта:
Код: Выделить всё
#!/bin/sh
sed "{s/{\\\cyryu}/ю/g
s/{\\\cyra}/а/g
s/{\\\cyrb}/б/g
s/{\\\cyrc}/ц/g
s/{\\\cyrd}/д/g
s/{\\\cyre}/е/g
s/{\\\cyrf}/ф/g
s/{\\\cyrg}/г/g
s/{\\\cyrh}/х/g
s/{\\\cyri}/и/g
s/{\\\cyrishrt}/й/g
s/{\\\cyrk}/к/g
s/{\\\cyrl}/л/g
s/{\\\cyrm}/м/g
s/{\\\cyrn}/н/g
s/{\\\cyro}/о/g
s/{\\\cyrp}/п/g
s/{\\\cyrya}/я/g
s/{\\\cyrr}/р/g
s/{\\\cyrsftsn}/ь/g
s/{\\\cyrs}/с/g
s/{\\\cyrt}/т/g
s/{\\\cyru}/у/g
s/{\\\cyrzh}/ж/g
s/{\\\cyrv}/в/g
s/{\\\cyrery}/ы/g
s/{\\\cyrz}/з/g
s/{\\\cyrsh}/ш/g
s/{\\\cyrerev}/э/g
s/{\\\cyrshch}/щ/g
s/{\\\cyrch}/ч/g
s/{\\\cyrhrdsn}/ъ/g
s/{\\\cyryo}/\\\\\"e/g
s/{\\\CYRYU}/Ю/g
s/{\\\CYRA}/А/g
s/{\\\CYRB}/Б/g
s/{\\\CYRC}/Ц/g
s/{\\\CYRD}/Д/g
s/{\\\CYRE}/Е/g
s/{\\\CYRF}/Ф/g
s/{\\\CYRG}/Г/g
s/{\\\CYRH}/Х/g
s/{\\\CYRI}/И/g
s/{\\\CYRISHRT}/Й/g
s/{\\\CYRK}/К/g
s/{\\\CYRL}/Л/g
s/{\\\CYRM}/М/g
s/{\\\CYRN}/Н/g
s/{\\\CYRO}/О/g
s/{\\\CYRP}/П/g
s/{\\\CYRYA}/Я/g
s/{\\\CYRR}/Р/g
s/{\\\CYRSFTSN}/Ь/g
s/{\\\CYRSH}/Ш/g
s/{\\\CYRS}/С/g
s/{\\\CYRT}/Т/g
s/{\\\CYRU}/У/g
s/{\\\CYRZH}/Ж/g
s/{\\\CYRV}/В/g
s/{\\\CYRERY}/Ы/g
s/{\\\CYRZ}/З/g
s/{\\\CYREREV}/Э/g
s/{\\\CYRSHCH}/Щ/g
s/{\\\CYRCH}/Ч/g
s/{\\\CYRHRDSN}/Ъ/g
s/{\\\CYRYO}/\\\\\"Е/g
}" $1 > tmp1
mv tmp1 $1
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
- --=Civil696=--
- Сообщения: 227
- ОС: Gentoo o_O
Re: Полезные скрипты
если взять scrot, xclip и скрипт из этого топика, то задача, вида "сделать скриншот -> залить его на хостинг картинок -> поместить ссылку в буфер обмена", становится довольно тривиальной:rm_ писал(а): ↑27.08.2008 09:10Скрипт для быстрого создания скриншотов.
Требует scrot, zenity, pngcrush.
Код: Выделить всё
#!/bin/sh
SCREEN="/tmp/screen_tmp.png"
scrot -d 5 $SCREEN && uimge.py -r --du $SCREEN | xclip
НЕ ПАНИКУЙ © ^_~
- --=Civil696=--
- Сообщения: 227
- ОС: Gentoo o_O
Re: Полезные скрипты
сегодня занимался написанием костылей:
немного надоело писать нечто в духе
добавил в .bashrc
теперь пишу:
плюс т.к. довольно часто хочется набрать:
смастерил свою версию велосипеда, на тему распаковки всего что под руку попадётся:
правила для распаковки, лежат в отдельном файле и сейчас выглядят так:
м.б. кому-нибудь пригодится
немного надоело писать нечто в духе
Код: Выделить всё
for i in *.some_suffix; do some_code "$i"; done
добавил в .bashrc
Код: Выделить всё
for-each ()
{
local com=$1
shift
for i in "$@"; do $com "$i"; done
}
теперь пишу:
Код: Выделить всё
for-each some_code *.some_suffix
плюс т.к. довольно часто хочется набрать:
Код: Выделить всё
unrar *.rar
смастерил свою версию велосипеда, на тему распаковки всего что под руку попадётся:
Код: Выделить всё
ident ()
{
echo "$1" | grep -E "*.$2$" > /dev/null
return $?
}
source ~/.bash/unpack_rules
unprul_search ()
{
for i in $(seq 0 $((${#UNPRULES[@]} - 1)))
do
ident "$1" ${UNPRULES[$i]} && echo ${UNPRULES[$(($i + 1))]} && return
done
}
unpack_this ()
{
$(unprul_search "$1") "$1"
}
unpack ()
{
for-each unpack_this "$@"
}
правила для распаковки, лежат в отдельном файле и сейчас выглядят так:
Код: Выделить всё
UNPRULES=(
# "suffix:" "exec command:"
"[Zz][Ii][Pp]" "unzip"
"[Rr][Aa][Rr]" "unrar x"
"gz" "gunzip"
"bz2" "bunzip2"
"tar" "tar xvf"
"tar.bz2" "tar xvjf"
"tar.gz" "tar xvfz"
"tgz" "tar xvfz"
)
НЕ ПАНИКУЙ © ^_~
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
а mc?
- --=Civil696=--
- Сообщения: 227
- ОС: Gentoo o_O
Re: Полезные скрипты
не люблю mc (хотя м.б. я просто не умею его готовить), использую, в основном, когда надо переименовать файл, с именем из "кракозябр" и иногда, в качестве фтп-клиента (=
НЕ ПАНИКУЙ © ^_~
Re: Полезные скрипты
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.
The more you believe you don't do mistakes, the more bugs are in your code.
Re: Полезные скрипты
Код: Выделить всё
-rwxr-xr-x 1 root root 1215 2009-01-19 15:19 ./ren.sh
mount :
Код: Выделить всё
/dev/hda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/hda6 on /home type ext3 (rw)
/dev/sda5 on /mnt/hdd2 type ext3 (rw,noexec,nosuid,nodev)
/dev/sdb5 on /mnt/hdd1 type ext3 (rw,noexec,nosuid,nodev)
/dev/sdc5 on /mnt/hdd3 type ext3 (rw,noexec,nosuid,nodev)
/mnt/hdd2/anonymous on /home/ftp type none (rw,bind)
/mnt/hdd1/anonymous/video on /home/ftp/media/video type none (rw,bind)
/mnt/hdd2/anonymous/media/video/serials on /home/ftp/media/video/serials type none (rw,bind)
/mnt/hdd1/incoming on /home/ftp/incoming type none (rw,bind)
/mnt/hdd2/anonymous/media/video/movie.01 on /home/ftp/media/video/movie.01 type none (rw,bind)
/mnt/hdd3/anonymous/games on /home/ftp/media/games type none (rw,bind)
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
это вывод чего?
Re: Полезные скрипты
Код: Выделить всё
ls -l ./ren
просто файл по другому назвал
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
Re: Полезные скрипты
Ребят, а не подскажете из какого пакета бинарники apeinfo и mac?
На самом деле всё очень просто...
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
нет. это же вроде нелегальные бинарники?
Re: Полезные скрипты
[offtop]
А можно ли выполнять арифметические операции на Bash'e?
[offtop]
А можно ли выполнять арифметические операции на Bash'e?
[offtop]
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
Re: Полезные скрипты
Janik , конечно можно, но только простейшую арифметику, для более "сложных" - bc
Re: Полезные скрипты
[offtop]
Я просто хотел реализовать игру Баше с множеством любых предметов... Я уже реализовал её на БЭЙСИКе, кому интересно, пишите в личку!
[offtop]
Я просто хотел реализовать игру Баше с множеством любых предметов... Я уже реализовал её на БЭЙСИКе, кому интересно, пишите в личку!
[offtop]
Кто ищет, тот всегда найдет!
Опыт - это когда все получается с первого раза.
Опыт - это когда все получается с первого раза.
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
$
$ let "i = 21 * 32"; echo $i
672
$ echo $(echo "scale=10; 4*a(1)" | bc -l)
3.1415926532
$ expr 100 + 345
445
читаем:
help let
expr --help
man bc
Спасибо сказали:
Re: Полезные скрипты
Только конструкция echo $(...) лишняя; этакая "вещь в себе"..
Ещё можно добавить
Shell
echo $(( (1+2)*(3+4) ))
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
я имел ввиду, что мы получаем число, которое не только можно вывести, но и обработать:
Код: Выделить всё
find .... -exec grep $(echo "scale=10; 4*a(1)" | bc -l) {} /dev/null \;
ну как-то так...
Re: Полезные скрипты
Рекурсивный поиск дубликатов файлов в текущей директории и замена их жесткими (или символьными) ссылками
Навеяно темой Программа для поиска дубликатов файлов. Создавать кучу файлов по md5 - накладно как по времени, так и по нагрузке на жесткий диск; KleanSweep меня не устроила тем, что ищет дубликаты лишь по размеру (т.е. находит обычно не совсем то, что нужно) и предлагает лишь удалить дубли.
Для работы этого скрипта необходим настроенный mysql-сервер, в рабочей базе данных (у меня это files_db) необходимо создать две таблицы: 1) files с полями filename [varchar(1024)] и filesize [int]; 2) dups с полями filename и filemd5 [char(32)]. Также следует учесть, что таблица files будет занимать очень много места для больших списков файлов.
Из-за бага с mysql пришлось при загрузке данных добавить костыль в виде iconv'а (честно говоря, не разбирался с этим, возможно, можно как-то заставить mysql работать в родной кодировке, а не в юникоде).
Сам скрипт (в начале в комментариях - своего рода бенчмарк. Конечно, время выполнения зависит не только и не столько от количества файлов в текущей директории, но от количества файлов с дубликатами):
P.S. Думаю, если переписать на С, быстродействие повысится. Но, пока некогда...
Навеяно темой Программа для поиска дубликатов файлов. Создавать кучу файлов по md5 - накладно как по времени, так и по нагрузке на жесткий диск; KleanSweep меня не устроила тем, что ищет дубликаты лишь по размеру (т.е. находит обычно не совсем то, что нужно) и предлагает лишь удалить дубли.
Для работы этого скрипта необходим настроенный mysql-сервер, в рабочей базе данных (у меня это files_db) необходимо создать две таблицы: 1) files с полями filename [varchar(1024)] и filesize [int]; 2) dups с полями filename и filemd5 [char(32)]. Также следует учесть, что таблица files будет занимать очень много места для больших списков файлов.
Из-за бага с mysql пришлось при загрузке данных добавить костыль в виде iconv'а (честно говоря, не разбирался с этим, возможно, можно как-то заставить mysql работать в родной кодировке, а не в юникоде).
Сам скрипт (в начале в комментариях - своего рода бенчмарк. Конечно, время выполнения зависит не только и не столько от количества файлов в текущей директории, но от количества файлов с дубликатами):
Код: Выделить всё
#!/bin/sh
# 2 минуты 12.38 секунд на 12'989 файлов общим размером 10'026'786'125 байт
# (стало: 9'919'093'813 байт)
# 1 минута 13.00 секунд на 10'399 файлов общим размером 27'171'656'169 байт
# (стало: 26'401'660'287 байт)
# 1 минута 17.82 секунд на 8'686 файлов общим размером 11'474'216'791 байт
# (стало: 11'131'537'062 байт)
# 3 минуты 19.77 секунд на 16'257 файлов общим размером 70'697'892'519 байт
# (стало: 69'132'667'051 байт)
#
FILELIST="filelist_4_mysql"
SQLFILE="tmp_4_mysql"
OUTP="double_files"
STEP_CNTR=0
function Step(){
STEP_CNTR=$[$STEP_CNTR + 1 ]
echo -e "\n\e[1;32m$STEP_CNTR\t\t$*...\e[0m"
}
alias mysql='mysql --default-character-set=koi8r --batch -s files_db'
rm -f $FILELIST $SQLFILE $OUTP
Step "Making list of files"
find -type f -printf "%p\t%s\n" | iconv -f koi8-r -t utf8 > $FILELIST
Step "Finding files with same size"
cat > $SQLFILE << EOF
delete from files;
load data local infile "filelist_4_mysql" into table files(filename, filesize);
delete from files where filesize in (select filesize from (select filesize,count(*) c from files group by filesize having c = 1) T);
delete from files where filesize = 0;
select filesize from files group by filesize;
EOF
mysql < $SQLFILE > $OUTP
cat > $SQLFILE << EOF
delete from dups;
load data local infile "filelist_4_mysql" into table dups(filename, filemd5);
delete from dups where filemd5 in (select filemd5 from (select filemd5,count(*) c from dups group by filemd5 having c = 1) T);
select filename from dups group by filemd5;
EOF
Step "Finding duplicates"
while read SIZE
do
rm -f $FILELIST
echo "select filename from files where filesize = $SIZE;" | mysql | while read FILE
do
MD=$(md5sum "$FILE" 2>/dev/null);
if [ "$MD" != "" ]; then
echo -e "$FILE\t$MD" | iconv -f koi8-r -t utf8 >> $FILELIST
else
echo -e "\e[1;31;40mCant read MD5 of $FILE\e[0m\nTrace:"
echo "select filename from files where filesize = $SIZE;" | mysql
fi
done
mysql < $SQLFILE | while read FILE
do
echo -e "\n\e[1;41;33m$FILE\e[36m has dublicates:\e[0m"
echo "select filename from dups where filemd5 = (select filemd5 from dups where filename = \"$FILE\") AND filename != \"$FILE\";" | mysql | while read D_FILE
do
echo -e "\e[1;32;40m$D_FILE\e[0m"
ln -f "$FILE" "$D_FILE" || ln -fs "$FILE" "$D_FILE" || echo -e "\e[1;31;40merror linking $FILE to $D_FILE!!!\e[0m"
done
done
done < $OUTP
Step "Deleting trash"
echo "delete from files; delete from dups;" | mysql
rm -f $FILELIST $SQLFILE $OUTP
P.S. Думаю, если переписать на С, быстродействие повысится. Но, пока некогда...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
Спасибо сказали:
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
eddy
спасибо, интересный скрипт.
не, основная нагрузка идёт на базу, потому хоть на асме пишите - так и будет...
спасибо, интересный скрипт.
не, основная нагрузка идёт на базу, потому хоть на асме пишите - так и будет...
Re: Полезные скрипты
А как быть с багом КОИ8-Р не знаете? А то, смотрю, на багрепорте mysql о нем сообщали еще в 2002м году. Неужели до сих пор не решено?
Хотя, можно, конечно, установить из исходников.
Хотя, можно, конечно, установить из исходников.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Полезные скрипты
Не использовать mysql? Для скрипта, думаю, sqlite — в самый раз.
Мои розовые очки
Re: Полезные скрипты
что есть «баг koi8r»? (я понимаю, что баг присутствует в самой идее трактовать один и тот же кусок информации в зависимости от предпочитаемого языка общения, но вот про баг в отношении mysql было бы интересно услышать).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
- drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
- Контактная информация:
Re: Полезные скрипты
кстати да. у меня вроде нормально работает локально MySQL+Apache+PHP в Slackware 10.2. Кодировка там как раз koi8-r. Хотя в базе вполне можно использовать и cp1251.
Re: Полезные скрипты
А у меня и у сервера mysql, и у пользователя в настройках КОИ8 (т.е. общесистемная локаль), но при импорте таблиц из файла mysql понимает только utf8.
Тем, что с дубликатами можно делать что угодно, а не только удалять. Я уже упоминал, для чего пришлось "изобретать велосипед".
Тем, что с дубликатами можно делать что угодно, а не только удалять. Я уже упоминал, для чего пришлось "изобретать велосипед".
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка