You are not logged in.
core, extra & community are at 100% :-)
(at least for the 32-bit)
Last edited by karol (2012-01-21 20:50:23)
Offline
typo. There wouldn't be any reason that a 32 bit package would be signed without the 64 bit complement being signed.
$ signed community
Yes: 1192 [51%]
No: 1136
$ signed extra
Yes: 2047 [73%]
No: 744
Last edited by falconindy (2012-01-21 21:23:46)
Offline
The whole [core], 3/4 [extra] and half of the [community] repo is signed.
Very nice script, thank you.
Offline
There might be a cleanest way to do this but it works.
The script extracts archives (extracts it in a sub-folder if it's a tar/rar bomb)
for file in $@ ; do
if [ -f $file ] ; then
tempdir=$(echo $file | sed 's/\..\{3\}$//')
mkdir -p "$tempdir"
cp "$file" "$tempdir"
cd "$tempdir"
case "$file" in
*.zip) unzip $file;;
*.tar) tar xvf $file;;
*.tar.bz2 | *.tbz2) tar xjvf $file;;
*.tar.gz | *.tgz) tar xzvf $file;;
*.bz2) bunzip2 $file;;
*.rar) unrar x $file;;
*.gz) gunzip $file;;
*.Z) uncompress $file;;
*.7z) 7z x $file;;
*.xz) tar xJvf $file;;
*) echo ""$file" cannot be extracted" >> /dev/stderr;;
esac
rm -f $file
filecount=$(($(ls -l | wc -l) - 1))
if [ $filecount -lt 2 ] ; then
for f in * ; do
mv "$f" "../"
done
fi
cd "../"
if [ $filecount -lt 2 ] ; then
rmdir "$tempdir"
fi
else
echo "$file : file not found." >> /dev/stderr
fi
done
Why choose the lesser evil ?
You can follow me on Twitter (beware, it's mostly french).
Offline
Scared of tar bombs? Try atool :-)
Offline
Here's a little script to pull the newest updates for all git/svn directories in a directory (e.g.: $HOME/src) Shouldn't be too hard to integrate mercurial, too.
#!/bin/bash
SRCDIR=$HOME/src
cd $SRCDIR
REPODIRS=( */ );
echo ":: Starting source update..."
for DIR in ${REPODIRS[@]}; do
if [ -d $SRCDIR/$DIR/.git ]; then
echo "> $(echo Updating $DIR| sed s'/\///')"
cd $SRCDIR/$DIR; git pull
elif [ -d $SRCDIR/$DIR/.svn ]; then
echo "> $(echo Updating $DIR| sed s'/\///')"
cd $SRCDIR/$DIR; svn up
fi
done
exit
Offline
Nice thread, think I'll join in:
This uses gcalcli to extract and format forthcoming appointments from google-calendars. Takes either a an argument for the calendar or reads from a config file. Output is formatted for conky, but could be easily modifed.
#!/bin/bash
# We need linebreaks fixing for the return output from gcalcli
IFS="
"
#Now set up some initial variables
month=`date +%m`
today=`date +%d/%m/%Y`
year=`date +%Y`
thisday=`date +%d`
nmonth=$month
reallytoday=$thisday
# And and array with the number of days in each month
declare -a mlength=( 31 28 31 30 31 30 31 31 30 31 30 31 )
syear=$year
curyear=$year
days=${mlength[$month-1]}
maxdays=$days
let "maxdays = $maxdays + 1"
# Now this bit gets complicated. The script will display the past five days and the next 23 days appointments (28 days in total) so we need some jigarry pokery to fix up the start and end dates
if [ $thisday -lt 6 ]; then
if [ $month -gt 1 ]; then
let "month = $month - 1"
else
month=12
let "syear = $year - 1"
fi
let "ldays = 5 - $thisday"
mdays=${mlength[$month-1]}
else
let "ldays = $thisday - 5"
let "mdays = $ldays + $ldays"
fi
let "thisday = $mdays - $ldays"
stdate=$month/$thisday/$syear
nday=`expr $days - $reallytoday`
nyear=$curyear
if [ $nday -lt 28 ]; then
let "nday = 28 - $nday"
let "nmonth = $nmonth + 1"
if [ $nmonth -gt 12 ]; then
nmonth=1
let "nyear = $curyear + 1"
fi
fi
ndate=$nmonth/$nday/$nyear
# OK - we have the date range. The script will work either using a config file for multiple accounts, or by specifying the accoutn details on the script command line, so we need to check both
if [ -f ~/.gcals -a $# = 0 ]; then
while read line
do
# parse the config file
l=$line
account=`echo $l | sed 's/user\=\(.*\)password.*/\1/'`
password=`echo $l |sed 's/.*password\=\(.*\)/\1/'`
# and get the info from gcalcli
events=(`gcalcli --user $account --pw $password --nc --24hr agenda "$stdate" "$ndate"`)
# Now we need to format it for conky. You must have the colors defined in your conkyrc. Feel free to change the color declarations (or remove them altogether) but make sure you only change or remove \{colorX} or you'll break the sed expressions.
for i in "${events[@]}"
do
ev=""
ev="$ev`echo $i | sed 's/ \{9\}/\$\{color8\}\$\{goto 130\}/' | sed 's/\( [0-9]\{2\}\) /\1\$\{color7\}\$\{goto 80\}/' | sed 's/\(:[0-9]\{2\}\) /\1\$\{color8\}\$\{goto 130\}/'`"
ev="\${color5}$ev"
if [ -n $ev ]; then
echo -e "$ev"
fi
done
done < ~/.gcals
else
if [ $# = 2 ]; then
# As above
events=(`gcalcli --user $1 --pw $2 --nc --24hr agenda "$stdate" "$ndate"`)
for i in "${events[@]}"
do
ev=""
ev="$ev`echo $i | sed 's/ \{9\}/\$\{color8\}\$\{goto 130\}/' | sed 's/\( [0-9]\{2\}\) /\1\$\{color7\}\$\{goto 80\}/' | sed 's/\(:[0-9]\{2\}\) /\1\$\{color8\}\$\{goto 130\}/'`"
ev="\${color5}$ev"
if [ -n $ev ]; then
echo -e "$ev"
fi
done
else
# Very limited checking - if there's no config file and less than two command line arguments, output an error
echo "Not enough arguments"
fi
fi
And I've added this to rc.local.shutdown, but could just as easily be used standalone, to unmount mounts in /media and mnt/ (I did this because if I failed to unmount local mounts the kernel complained on the next boot)
#!/bin/bash
STIFS=$IFS
IFS='
'
mounts=(`mount | grep media`)
points=${#mounts[*]}
for ((i=0; i<$points; i++))
do
mpoint=`echo "${mounts[$i]}" | sed 's/\ .*//'`
echo "Unmounting: $mpoint"
umount $mpoint
done
mounts=(`mount | grep mnt`)
points=${#mounts[*]}
for ((i=0; i<$points; i++))
do
mpoint=`echo "${mounts[$i]}" | sed 's/\ .*//'`
echo "Unmounting: $mpoint"
umount $mpoint
done
IFS=$STIFS
This will take a random picture from a pre-defined folder and resize it, ideal for conky, picframe screenlet etc. Takes a 3 line config with the folder name, the time between changes (in seconds) and the size of the end picture (e.g. 160x120)
#!/bin/bash
# Have the script recognise spaces in directory paths and filenames
IFS='
'
#Now we need to check if the script is already running. For some odd reason it seems to survive after a relog
PDIR=${0%`basename $0`}
LCK_FILE=~/.`basename $0`.lck
trap 'rm ${LCK_FILE};exit' 1 2 3 15
if [ -f "${LCK_FILE}" ]; then
MYPID=`head -n 1 "${LCK_FILE}"`
TEST_RUNNING=`ps -p ${MYPID} | grep ${MYPID}`
if [ -z "${TEST_RUNNING}" ]; then
# It's not running, let's signal that
echo $$ > "${LCK_FILE}"
else
# An instance is already running. Exit gracefully
echo "Randompic is already running"
exit 0
fi
else
echo $$ > "${LCK_FILE}"
fi
#This is the main bit
while :
do
# Read the config file
exec 3<> ~/.conkypic
read <&3 dirpath
read <&3 timeout
read <&3 as
exec 3>&-
# Now get a list of files
cd $dirpath
files=(`ls -1 *.[Jj]??`)
len=${#files[*]}
if [ "$len" != "0" ]; then
# Pick a file at random
number=$RANDOM
let "number %= $len"
# Now we copy it a temporary location. The following copies to RAM. If you are short
# on memory change the location to somewhere in /home
cp "${wd}${files[$number]}" /dev/shm/conkypic.jpg
# Convert the image for conky
mogrify -format png -resize $as /dev/shm/*.jpg &
fi
# Wait before rep[eating
sleep $timeout
done
Last edited by Roken (2012-01-22 12:20:47)
Ryzen 5900X 12 core/24 thread - RTX 3090 FE 24 Gb, Asus Prime B450 Plus, 32Gb Corsair DDR4, Cooler Master N300 chassis, 5 HD (1 NvME PCI, 4SSD) + 1 x optical.
Linux user #545703
/ is the root of all problems.
Offline
Here is one that I wrote a long time ago, have shared here somewhere, but have recently scrapped and re-wrote the entire thing. Basically, it will create blank (or filled via template) script files chmodded executable, to any location you wish. By not specifying a location, it goes in the current working directory.
#!/bin/bash
# makescript - creates an already chmodded script
# Template script from planet.archlinux.org
scrpt=${0##*/} # script name
# Display usage if no parameters given
if [[ -z "$@" ]]; then
echo "${scrpt} ran without any options/arguments. Goodbye."
exit
fi
# Text color variables
txtred='\e[0;31m' # red
txtgrn='\e[0;32m' # green
txtylw='\e[0;33m' # yellow
txtblu='\e[0;34m' # blue
txtpur='\e[0;35m' # purple
txtcyn='\e[0;36m' # cyan
txtwht='\e[0;37m' # white
bldred='\e[1;31m' # red - Bold
bldgrn='\e[1;32m' # green
bldylw='\e[1;33m' # yellow
bldblu='\e[1;34m' # blue
bldpur='\e[1;35m' # purple
bldcyn='\e[1;36m' # cyan
bldwht='\e[1;37m' # white
txtund=$(tput sgr 0 1) # Underline
txtbld=$(tput bold) # Bold
txtrst='\e[0m' # Text reset
# Feedback indicators
info="${bldwht}${scrpt}${txtrst}"
pass="${bldblu}${scrpt}${txtrst}"
warn="${bldred}${scrpt}${txtrst}"
# Constants
shabang='#!'
interp="${shabang}bin/bash"
template=''
ch_interp=''
ch_templ=''
moveto=''
while getopts ":s:t:hm:" FLAG;
do
case $FLAG in
s)
ch_interp=$(which ${OPTARG} 2> /dev/null)
[[ ${ch_interp} != "" ]] && interp="${shabang}${ch_interp}" ;;
t)
ch_templ="$OPTARG"
[[ -f ${ch_templ} ]] && template='.' ;;
h)
echo -e "Usage: ${info} [options] filename(s)\n\n -s [interpreter] Choose script interpreter. Simply type bash for bash.\n -t [path-to-template] Use a template. Template should already have shabang.\n -m [path] Move script to path."
exit 0 ;;
m)
[[ -d "$OPTARG" ]] && moveto="$OPTARG" ;;
\?) echo -e "${warn}: Invalid option: -$OPTARG"; exit 1 ;;
esac
done
shift $((OPTIND-1))
for each in "$@";
do
[[ "$each" == "" ]] && echo -e "${warn}: No filename given." && exit 1
if [[ -f "$each" ]]; then
read -p "${scrpt}: $each exists. Over-write? (y/n)" ans
case $ans in
y | Y) ;;
n | N) exit 1 ;;
*) echo -e "${warn}: Invalid Option."; exit 1 ;;
esac
fi
if [[ ! ${template} == '' ]]; then
cat ${ch_templ} > "$each"
chmod +x "$each"
echo -e "${info}: Created and CHMODed $each with template ${ch_templ}"
exit 0
fi
echo -e "${interp}\n\n" > "$each"
chmod +x "$each"
echo -e "${info}: Created and CHMODed $each"
if [[ "${moveto}" != "" ]]; then
mv "$each" "${moveto}"
echo -e "${info}: $each moved to ${moveto}"
fi
done
Offline
A small perl script to download all files of a specific type from a website...
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
usage() if @ARGV != 2;
my $url = $ARGV[0];
my $type = $ARGV[1];
my $content = get($url);
unless ($content) {
die "Something went wrong with downloading the page!.";
}
map { /.*\/(.+)$/; getstore($_, $1) }
grep { /\.${type}$/ } ($content =~ /href="(.*?)"/g);
sub usage {
print "Usage: $0 <url> <type>\n";
print "This program downloads all files from the specified webpage of\n";
print "the chosen filetype.\n";
exit(0);
}
__END__
Offline
Is it the ame as e.g. 'wget -A.jpg,gif' ?
Offline
Yeah, similar...didn't know that wget could do this
Offline
This gets the path to the current flash movies playing in youtube so that one can just copy it someplace if required
#!/bin/sh
for i in /proc/$(ps ax | awk '/flash/ && !/grep/ {print $1}')/fd/* ;do
file "$i"
done | awk -F":" '/\/tmp\/Flash/ {print $1}'
Last edited by sujoy (2012-01-31 20:13:04)
Offline
I had the need to convert some maildir trees to mboxes.
#!/usr/bin/python
import mailbox
import sys
if len(sys.argv) != 3:
print(sys.argv[0], "<maildir_path> <mbox_path>")
sys.exit(-1)
maildir = mailbox.Maildir(sys.argv[1], create=False)
mbox = mailbox.mbox(sys.argv[2])
i = 0
for message in maildir:
mbox.add(message)
i += 1
print("\rmessages processed:", i, end='')
print()
Offline
Laptop script changes governor. If soft keys doesnt work:
p2=("ondemand")
p3=("powersave")
### Current cpu governor
she_current=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor`
if [[ "${she_current}" == "${p1}" ]]; then
cpufreq-set -c 0 -g ondemand && cpufreq-set -c 1 -g ondemand
elif [[ "${she_current}" == "${p2}" ]]; then
cpufreq-set -c 0 -g powersave && cpufreq-set -c 1 -g powersave
elif [[ "${she_current}" == "${p3}" ]]; then
cpufreq-set -c 0 -g performance && cpufreq-set -c 1 -g performance
fi
Offline
This will mount both encrypted (with dm-crypt/LUKS) and ordinary disks, and, if they are already mounted, unmount them. Got tired of all the encryption-commands needed, and decided to get lazy with some bash.
#!/bin/bash
# mountc: A script for managing encrypted and ordinary disks.
PART=$(basename $1)
# Check for root
if [[ $EUID -ne 0 ]];
then # We are not root
echo "This script must be run as root" 1>&2
exit 1
fi
# Check for arguments
if [ "x$1" = "x" ];
then
echo "Usage: $(basename $0) device"
exit 1
fi
# Set variable if drive is mounted
if [ "$(mount | awk '{ print $1 }' | grep -o $PART)" = "$PART" ];
then
MOUNTED="yes"
fi
# Check for encryption (via exitcode)
if [ "$(sudo cryptsetup luksDump /dev/$PART 2>&1 > /dev/null && echo $?)" = "0" ];
then # LUKS-device
if [ "$MOUNTED" = "yes" ];
then # Drive is already mounted, umount it
umount /dev/mapper/$PART
cryptsetup luksClose $PART
echo "Unmounted /dev/$PART."
else # Drive is NOT mounted, mount it
cryptsetup luksOpen /dev/$PART $PART
mkdir -p /media/$PART
mount /dev/mapper/$PART /media/$PART
fi
else # Not a LUKS-device (or options given for mount)
if [ "$MOUNTED" = "yes" ];
then # Drive is already mounted, umount it
umount "$@"
else # Drive is NOT mountes, mount it
mount "$@"
fi
fi
Last edited by graph (2012-02-02 12:02:02)
Offline
I've just spend the last three days learning, well, not only bash, but the logic behind scripting...
Why? because I wanted to sort my Pictures according to their orientation...and couldn't find a way to do that.
So, here it is, a script to sort pictures
(it's probably a bit bloated, but it was a good exercice to learn the underlying struture of scripting)
#!/bin/bash
#Give lists of selected pictures, sorted by orientation
#
#!!!!Dependencies: feh ; bc ; bash>4.0
#set current time for output filenaming
currenttime=$(date +%Y-%m-%d-%Hh%M)
function main {
#Ask for file directory path, then call sorting function
read -e -p "Path to Pictures Directory?" -i "$HOME/" pathtoimage
if test -d "$pathtoimage"
then sortpictures
else echo "Path is not valid"; main
fi
}
function sortpictures {
#Picture sorting
function recurs {
#Ask for recursive sorting
#feh outputs a path/to/image#width#height formated list
read -e -p "Include subdirectories? (y/n) " recursivite
if [[ "$recursivite" = y ]]
then feh -r -L %f#%w#%h $pathtoimage > /tmp/listemp
elif [[ "$recursivite" = n ]]
then feh -L %f#%w#%h $pathtoimage > /tmp/listemp
else clear; recurs
fi
}
recurs
while read LINE
do
#Sorting feh output's fields
picpath=$(echo $LINE | cut -d"#" -f1)
picw=$(echo $LINE | cut -d"#" -f2)
pich=$(echo $LINE | cut -d"#" -f3)
ratio=$(echo $picw/$pich | bc -l)
#Compare picture width/height ratio to a somehow arbitrary ratio (yeah, magic number!)
#and output to a list
if (( $(bc <<< "$ratio > 1.2") ))
then echo $picpath >> /$pathtoimage/sortedbylandscape$currenttime
elif (( $(bc <<< "$ratio < 0.8") ))
then echo $picpath >> /$pathtoimage/sortedbyportrait$currenttime
else echo $picpath >> /$pathtoimage/sortedbysquare$currenttime
fi
done < /tmp/listemp
rm /tmp/listemp
echo "Lists written to $pathtoimage directory"
}
main
Hasta la Singularidad Siempre
Offline
Great work there for a first script haiku. One little bit of streamlining would be to replace
if (( $(bc <<< "$ratio > 1.2") ))
with
if [[ $ratio -gt 1.2 ]]
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Great work there for a first script haiku. One little bit of streamlining would be to replace
if (( $(bc <<< "$ratio > 1.2") ))
with
if [[ $ratio -gt 1.2 ]]
No. Absolutely not. bash doesn't do floating point arithmetic.
$ ratio=3
$ [[ $ratio -gt 1.2 ]]
bash: [[: 1.2: syntax error: invalid arithmetic operator (error token is ".2")
Regardless, (( )) is the preferred context for arithmetic operations over [[ ]].
Offline
Thanks guys - it kinda struck me when I first read that bash couldn't do float arithmetic :-)
About the (( )) syntax, I got to admit I just saw it on the net...
I'll probably work on it some more : my to-do list is to implement positional parameters as an input for the picture folder path (it would be easier to call the script that way from another script), and as an input for a minimum ratio instead of it being hard-coded.
Anyway thanks!
PS Funny how the replies I get are from two people from Massachusetts and New Jersey... and end up disagreeing...on this particular Superbowl Week-end ;-)
Hasta la Singularidad Siempre
Offline
Oops... sorry. I stand corrected, and more fully educated.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Code to watch a file until its size stops changing and then shutdown the machine. It also prints out periodic reminders about the time and filesize.
N.B. It uses a shutdown script.
#!/bin/bash
if [ ! $# -eq 1 ]; then
echo "Usage: $0 <file>"
exit 1
fi
if [ ! -e $1 ]; then
echo "Invalid file"
exit 2
fi
count=0
old_size=`stat $1 -c "%s"`
while true; do
sleep 30
new_size=`stat $1 -c "%s"`
if [ $new_size -eq $old_size ]; then
shutdown.sh shutdown
break
fi
let "count += 1"
let "count %= 10"
if [ $count -eq 0 ]; then
date
echo $1
echo `ls -sh $1 | cut -f1 -d' '`
echo
fi
old_size=$new_size
done
exit 0
Offline
#!/bin/bash
USER="liam"
SERVER="88.198.223.123"
DIR="~/screenshots"
FILENAME="$(date -d 'today' +%d-%m-%Y-%H.%M)"
SITE="$SERVER/~liam/screenshots/$FILENAME.png"
scrot -e "mv \$f $FILENAME.png"
scp "$FILENAME.png" $SERVER:$DIR
rm "$FILENAME.png"
echo "http://$SITE"
Need something to automate uploads to my server and this 5 minute script makes it pretty easy. Planning to increase what it can do with options to select (basically what scrot does) but uploading it at the same time.
Last edited by jutnux (2012-02-05 20:00:57)
Offline
Allan wrote:Kill gnome-screensaver before starting mplayer
#!/usr/bin/env python import os import os.path import sys os.system("killall gnome-screensaver") command = '/usr/bin/mplayer %s "%s"' % (' '.join(sys.argv[1:-1]), os.path.normpath(sys.argv[-1])) os.system(command) os.system("gnome-screensaver")
I still do not understand the "command =" line but it works
Just an FYI. xscreensaver has a -disable command that disables the screensaver for some time. You can use that with mplayer's "heartbeat-cmd" setting - might be cleaner to do it that way
διπλοῦν ὁρῶσιν οἱ μαθόντες γράμματα.
Offline
This is an attempt to ensure that when I restart X, multiple versions of the same process are not spawned. It works, but it seems needlessly kludgy...
#!/bin/bash
# Check if app is running on starting X
list=(mpd mpdscribble highlights)
for app in "${list[@]}"; do
check=$(ps -C "$app" -opid=)
if [[ -z "$check" ]]; then
case "$app" in
mpd) mpd $HOME/.mpd/mpd.conf ;;
mpdscribble) mpdscribble & ;;
highlights) $HOME/Scripts/highlights & ;;
esac
fi
done
Offline
Could do:
pgrep mpd &>/dev/null || mpd $HOME/.mpd/mpd.conf
pgrep mpdscribble &>/dev/null || mpdscribble &
pgrep highlights &>/dev/null || $HOME/Scripts/highlights &
Offline