You are not logged in.
@AronBP
Please edit your typo...
#!/bin/dash
#!/bin/bash
Never argue with stupid people,They will drag you down to their level and then beat you with experience.--Mark Twain
@github
Offline
@AronBP
Please edit your typo...#!/bin/dash
#!/bin/bash
Still, I try to change it to /bin/sh when posting so everyone can use it, but I forgot. Sorry!
EDIT:
Here's V2, modified to work with multiple packages like I wanted it to.
#!/bin/sh
# Return n packages not found.
ret=0
for i in $@
do
url=$(eval "expac '%u' "$i" || expac -S '%u' "$i"")
if [ $? -eq 0 ]
then
xdg-open "$url"
else
echo "$i not found." 1>&2
ret=$(expr $ret + 1)
fi
done
exit $ret
Last edited by AaronBP (2012-10-27 10:02:23)
Offline
@AronBP
Sorry I was not familiar with "dash" , It gave me error , so I thought it was a typo .
Never argue with stupid people,They will drag you down to their level and then beat you with experience.--Mark Twain
@github
Offline
Well, I didn't really find anything like what I was hoping for, and so I attempted to make my own bash script for wallpaper changing. It's catered more towards openbox usage, but it could probably edited easily enough anyways.
I'm rather new at bash scripts, so there is a high chance that it is...messy or poorly implemented. If anyone can help me out with that, it would be nice.
#!/bin/bash
#--------------------------------------------------------------------
# Wallpaper Changer Script
# -------
# Allows for separate image directories for each virtual desktop
# and will change to random images within the directory when called.
# Calling with "c" is for an Openbox pipemenu allowing the user to
# manually change the current wallpaper to a different one within
# the defined desktop image directory.
# Also, I have no idea how or why it works, but if you leave the
# directories undefined, it still works but will use all images
# from the folders that were previously defined...
# Configurations
# -------
# Choose directory with images for each desktop
# Change command of wallpaper setting program (feh default)
#-------------------------------------------------------------------
DIR0='/home/jplayer/.config/openbox/wallpapers/light'
DIR1='/home/jplayer/.config/openbox/wallpapers/dark'
DIR2='/home/jplayer/.config/openbox/wallpapers/cute'
DESKTOP=$(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}')
DIRNAME=DIR$(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}')
eval DIR=\$$DIRNAME
if [ "$1" == "c" ]; then
echo '<openbox_pipe_menu>'
DESKTOP=$(($(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}')+3))
DESKTOPID=$(xprop -root _NET_DESKTOP_NAMES | sed 's/"//g' | sed 's/,//g' | awk "{print \$$DESKTOP}")
echo '<separator label="'$DESKTOPID'"/>'
echo '<item label="Random">'
echo '<action name="Execute">'
echo '<execute>~/.config/openbox/pipemenus/wallpaper</execute>'
echo "</action></item>"
# List files in corresponding desktop directory
ls $DIR |
(
while read line
do
echo $line
echo '<item label="'$line'">'
echo '<action name="Execute">'
FEH='feh --bg-fill '$DIR/$line
echo '<execute>'$FEH'</execute>'
echo "</action></item>"
done
)
# Close PipeMenu
echo '</openbox_pipe_menu>'
# Handle wallpaper changing
else
feh --bg-fill $(find $DIR -type l -iregex '.*\.\(bmp\|gif\|jpg\|png\)$' | sort -R | head -1)
echo $DIR
fi
Offline
Hi !
I made a backlight control script since I was unable to manage it with xbacklight. It may be useful for those who also experienced troubles with xbacklight (or other backlight manager) and get errors like this :
No outputs have backlight property
but are able to control the backlight by setting a value in the file "/sys/class/backlight/acpi_video0/brightness".
So the script intends to easily manage this value.
#!/bin/bash
# Backlight control
#
# Uses the file /sys/class/backlight/acpi_video0/brightness to
# set or get the backlight value.
FILE="/sys/class/backlight/acpi_video0/brightness"
FILE_MAX="/sys/class/backlight/acpi_video0/max_brightness"
option=$1
value=$2
max=
function write_value
{
if [ -w $FILE ]; then
echo $value > $FILE
exit 0
else
echo "Permission denied. Make sure you have the permission to write in the file /sys/class/backlight/acpi_video0/brightness"
exit 1
fi
}
function set_bl
{
if [ $value -lt 0 -o $value -gt $max ]; then
echo "Invalid argument: value must be between 0 and $max."
exit 1
else
write_value
fi
}
function inc_bl
{
get_current_value
if [ $currentValue = $max ]; then
exit 0
else
value=$(($currentValue+1))
write_value
fi
}
function dec_bl
{
get_current_value
if [ $currentValue = 0 ]; then
exit 0
else
value=$(($currentValue-1))
write_value
fi
}
function max_bl
{
value=$max
write_value
}
function current_bl
{
get_current_value
echo "$currentValue ($max is the maximum)"
}
function get_current_value
{
while read line; do
currentValue=$line
done < $FILE
}
function get_max_value
{
while read line; do
max=$line
done < $FILE_MAX
}
function help_info
{
echo -e "usage: backlight [options]\nwhere options are:"
echo -e "\t=, -set <value [0,$max]>\tSet the backlight value"
echo -e "\t--, -dec\t\tDecrease the backlight value"
echo -e "\t++, -inc\t\tIncrease the backlight value"
echo -e "\t-max\t\tSet the maximal backlight value"
echo -e "\t-get\t\t\tGet the current and maximal backlight value"
echo -e "\t-h, --help\t\tThis help"
echo -e "\nNote: you must have the permission to write in the file /sys/class/backlight/acpi_video0/brightness"
}
### Main
get_max_value
case $option in
= | -set ) set_bl
;;
-- | -dec) dec_bl
;;
++ | -inc ) inc_bl
;;
-max ) max_bl
;;
-get ) current_bl
;;
-h | --help ) help_info
;;
* ) echo "Invalid argument: unknown option."
;;
esac
Help is included. Root permission by default, but it's more convenient to disable password request (sudoers) for key bindings.
Hope it can help ! It's my very first script.
Offline
tmux is just convenient for the preservation of running programs
alias mcabber="tmux attach-session -t mcabber || tmux new-session -d -s mcabber mcabber \; set status off \; attach"
alias mutt="tmux attach-session -t mutt || tmux new-session -d -s mutt mutt \; set status off \; attach"
alias irssi="tmux attach-session -t irssi || tmux new-session -d -s irssi irssi \; set status off \; attach"
Offline
If that's all you need tmux for have a look at dtach and reptyr combined. (dtach talks over a socket, so you just connect to that.)
Offline
If that's all you need tmux for have a look at dtach and reptyr combined. (dtach talks over a socket, so you just connect to that.)
Reptyr is seriously ooh, nice. Thanks for that!
Offline
Here's "some", which uses source-highlight to colorize text files according to their syntax and then pipes them through less. So, it's basically less with syntax highlighting.
#!/bin/bash
if [ ! -x `which source-highlight` ]; then
echo "GNU source-highlight is required" && exit 1
fi
if [[ $1 == "--help" ]]; then
echo "some: it's like less but with more"
echo ""
echo "USAGE: some [FILE]"
echo " some - [LANGUAGE]"
echo ""
echo "To read from a pipe, use the second form. In this case, you"
echo "must specify a language for the syntax coloring. See"
echo "source-highlight(1) for more info"
exit 0
fi
# source-highlight can autodetect many file extensions but it still
# misses some. If you use this and the output isn't properly colorized
# you should create your own lang.map file copying the system one and
# extend it as necessary.
#
# Default: $HOME/.config/source-highlight/lang.map
if [ -e $XDG_CONFIG_HOME/source-highlight/lang.map ]; then
LANG_MAP=$XDG_CONFIG_HOME/source-highlight/lang.map
else
LANG_MAP=/usr/share/source-highlight/lang.map
fi
# Arguments to pass to source-highlight. You can add more arguments
# here, like '-n' to add line-numbering
S_H_ARGS="--failsafe --lang-map=${LANG_MAP} -f esc -o STDOUT"
OLD_IFS=$IFS
IFS=""
buf=""
if [[ $1 == "-" ]]; then
while read line; do
if [[ "x$line" == "x" ]]; then
line="\f"
fi
buf=`cat <(echo $buf) <(echo $line)`
done
fi
IFS=$OLD_IFS
if [[ "x$buf" != "x" ]]; then
echo -e "$buf" | source-highlight $S_H_ARGS -s $2 | less -r
exit 0
fi
if [ ! -e $1 ]; then
echo "$1: No such file or directory" && exit 1
fi
do_less()
{
if [ $# -eq 2 ]; then
source-highlight $S_H_ARGS -s $2 -i $1 | less -R
else
source-highlight $S_H_ARGS -i $1 | less -R
fi
}
filename=`basename $1`
ext=${filename#*.}
base=`basename $filename .$ext`
# Use Bash highlighting for dotfiles
if [[ $filename == .$ext ]]; then
do_less $1 bash
exit 0
fi
# Otherwise let source-highlight guess
do_less $1
I recommend copying /usr/share/source-highlight/lang.map to your home directory somewhere (I use .config/source-highlight/lang.map) and setting the LANG_MAP variable to that location in the script. Then, you can easily add new mappings. For example, to use Shell highlighting for PKGBUILDS, add this line to your lang.map:
pkgbuild = sh.lang
To use Makefile highlighting for suckless config.mk files, add:
mk = makefile.lang
edit: nevermind, I adapted it to work with stdin. If you read from stdin you must specify a language, i.e.:
$ cat .bashrc | some - bash
Whereas this will automatically use bash highlighting:
$ some .bashrc
Last edited by jakobcreutzfeldt (2012-11-08 22:13:11)
Offline
Have you tried this:
export LESSOPEN="|/usr/bin/src-hilite-lesspipe.sh %s"
I have this in my bashrc, and this makes less pass everything through source-highlight and if it matches any known format it is highlighted appropriately - otherwise it is displayed with vanilla less.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Ehhhh....heh. No. I didn't know about that. Well, that makes things easier...
Ok I tried it and I have two observatons: 1) mine includes opening dotfiles with Bash coloring (which is usually correct, like .bashrc and .xinitrc), but it lacks the ChangeLog one which is easy enough to add. 2) the LESSOPEN one doesn't seem to work with pipes whereas mine does.
Eh, anyway, I'm just happy to have colorized less. It's the little things in life.
Last edited by jakobcreutzfeldt (2012-11-08 22:12:52)
Offline
Here is a snippet I'm using to monitor and control long running bash scripts launched from fcrontab.
#!/bin/bash
# Executes $0 (this script) within a detached screen sesssion if the $STY variable isn't set.
# $STY is a environment variable set by screen when a session is made.
if [ -z "$STY" ] ; then
# The session name is the full path to $0, with "/" replaced with "-"
SESSION="$(readlink -f "$0" | tr '/' '-')"
# I don't want the initial dash in the session name
SESSION="${SESSION:1}"
# Launch a detached screen session
screen -dmS "$SESSION" "$0" $@
# Attach the screen session if this is a terminal
if [ -t 0 ] ; then
echo "screen -r \"$SESSION\""
screen -r "$SESSION"
echo "Screen session ended with exit status: $?"
echo "Pausing for 10 seconds..."
sleep 10
fi
exit 0
fi
echo "Screen session established: $STY"
Here is a example explaining its usage further:
#!/bin/bash
source the-above-screen-snippet.sh
# At this point this script is running in a screen session.
# A long running command that backs up my home directory
rsync --verbose --recursive $HOME/ /mnt/home/
EXIT_STATUS=$?
# If this was launced by fcrontab, you won't get a mail with the output of
# the commands, since this is inside a screen session.
#
# As far as fcron knows this script has already ended, and the only reason
# you would have received an mail at this point, would be because the screen
# session failed to be created.
#
# In order to get mails I'm adding the following to scripts:
{
# sendmail needs a line beginning with "Subject: "
echo "Subject: Home backup script"
echo "The script ended with exit status: $EXIT_STATUS
# Of course you could have the above rsync command right here, then
# you get to see the output in the screen session, as well as getting
# the output sent in a mail to you
} | sendmail $USER@localhost
# sendmail could also be replaced with mutt. In those cases you could even attach
# files in the mails sent to you, such as a compressed archive of a log file rsync
# created.
I hope someone finds this as useful as I do
Offline
Massively replace text in all files of a directory:
https://bbs.archlinux.org/viewtopic.php?pid=1190759
Offline
Restart all running systemd services. This will kill x b.t.w.
#!/bin/bash
# Restart all systemd services that have status 'running'
systemctl list-units --type=service --no-pager --no-legend --full \
| grep -Po '^\S+(?=\s+loaded\s+active running)' \
| (while read var1 ; do
strservices+=" ${var1}"
done
#restart in one transaction to let systemctl handle dependencies
systemctl restart $strservices
)
In my case I want to skip a service named 'autologin' so the regex becomes '^(?!autologin)\S+(?=\s+loaded\s+active running)'
Last edited by rwd (2015-10-25 15:09:00)
Offline
Recently went to a security conference to compete in a CTF. Ended up needing this little gem to find every SUID and SGUID bin on the system. Great just to see if there is anything that shouldn't be root-boosted on your system.
find / -type f -perm +6000 -exec ls -l {} \;
Offline
Since this is so long thread, I do not know if it has been posted or not...
One liner to see the files without comments:
alias nocomment='grep -Ev '\''^(#|$)'\'''
Use:
nocomment /etc/mkinitcpio.conf
Never argue with stupid people,They will drag you down to their level and then beat you with experience.--Mark Twain
@github
Offline
Since this is so long thread, I do not know if it has been posted or not...
One liner to see the files without comments:alias nocomment='grep -Ev '\''^(#|$)'\'''
Use:
nocomment /etc/mkinitcpio.conf
This should work as well:
alias nocomment='grep -Ev "^(#|$)"'
Offline
Simple alarm clock, just edit the mplayer's command;
Usage: alarm 7:00
noise() {
case "$1" in
"mute"|"unmute")
amixer -q set Master "$1"
;;
*"%")
amixer -q set PCM "$1"
;;
esac
}
alarm() {
local n=$(date +"%s")
local w=$(date -d "$1" +"%s")
[ "$w" -gt "$n" ] || w=$(($w + 86400))
noise mute
sleep $(($w - $n))
noise unmute
for i in {10..42}; do
noise ${i}%
sleep 2
done &
mplayer ~/Music/lossless/Tarja\ Turunen/My\ Winter\ Storm/CD1/Damned\ And\ Divine.flac
}
Offline
An easy way to pick a dvb station to play in mplayer
#!/bin/bash
## Select DVB channel and
## show with mplayer
## load some values
chan_file=~/.mplayer/channels.conf
butlabel=""
a=0
sel_chan="OOPS"
## set it up so there are the right num buttons
## and they have the right label
while IFS=':' read -r channel line; do
[ "$a" -lt "1" ] && butlabel="$channel:$channel" || \
butlabel="$butlabel,$channel:$channel"
((a++))
done < "$chan_file"
sel_chan=`xmessage -center -print -buttons $butlabel "Select Channel"`
exec mplayer dvb://"$sel_chan" -demuxer mpegts
exit 0
Last edited by moetunes (2012-12-02 03:23:18)
You're just jealous because the voices only talk to me.
Offline
A handy python calculator, here's a thread I started on it:
Offline
I want to preview issue files so I made this with help from man agetty,
#!/bin/bash
sed -e 's,\\\\,\\,g' \
-e 's,\\b,'"9001,g" \
-e 's,\\d,'"$(date '+%a %b %e %Y'),g" \
-e 's,\\s,'"$(uname -s),g" \
-e 's,\\l,'"vc/$XDG_VTNR,g" \
-e 's,\\m,'"$(uname -m),g" \
-e 's,\\n,'"$(uname -n),g" \
-e 's,\\o,'"$(hostname -d),g" \
-e 's,\\O,'"$(hostname -f),g" \
-e 's,\\r,'"$(uname -r),g" \
-e 's,\\t,'"$(date +%T),g" \
-e 's,\\u,'"$(users | wc -w),g" \
-e 's,\\U,'"$(users | wc -w) users,g" \
-e 's,\\v,'"$(uname -v),g" \
< "$1"
aur S & M :: forum rules :: Community Ethos
Resources for Women, POC, LGBT*, and allies
Offline
Yesterday i was trying to change my terminal font using setfont, but i just wanted to try every font out there, like, in the actual terminal, so i did a little script.
It puts you through every font in your /usr/share/kbd/consolefonts/ folder, showing the tipical "The quick brown fox jumps over the lazy dog" sentence and displaying the alphabet, numbers and some other characters, you can always decide whether to continue or not, letting you "save" those fonts you found interesting, after that you will once more go through a list of your "saved" fonts and finally choose one, the script will automatically update your vconsole.conf file (you can actually do this at any given time by typing "select" when previewing a font)
so there it is...
it can manage a few flags (-s/--select to go to your selected fonts list automatically (since it's saved into a file), -h/--help to display a small help message)
#!/bin/bash
interestingFontsList=('')
red='\033[31m'
green='\033[32m'
purple='\033[35m'
defaultColor='\033[0m'
savedFonts="selectedfonts.txt"
configFile="/etc/vconsole.conf"
localCopy="vconsole.conf"
fontOpt=$(cat $configFile|grep FONT=)
newFontOpt="FONT=/usr/share/kbd/consolefonts/"
exampleText1="\n\nThe quick brown fox jumps over the lazy dog\n\n"
exampleText2="\tabcdefghijklmnopqrstuvwxyz\n\tABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
exampleText3="\t1234567890\t°!\"#$%&/()?¡\n"
#Gets the name of every system fonts and shows it to the user
viewSystemFonts(){
fontsPath="/usr/share/kbd/consolefonts"
exclusions="-e README -e ERRORS -e partialfonts"
#get the console fonts list
local systemFontArray=($(ls $fontsPath|grep -v $exclusions))
#let the user test every each one of them
showcast systemFontArray[@]
}
#this always recieves an array (of system console fonts names)
showcast(){
#initialize the arrays an vars
local fontArray=("${!1}")
pos1=0
local savedFontsArray=($(cat $savedFonts))
pos2=0
broke="false"
if [ ${#fontArray[@]} -eq ${#savedFontsArray[@]} ];
then
options="(y/n/select)"
listTitle="Selected Fonts"
highlight="true"
else
options="(y/n/save)"
listTitle="Previously Selected Fonts"
highlight="false"
fi
#for every font in the array
for font in ${fontArray[@]}
do
let pos1=($pos1+1)
pos2=1
#set the font as the system
setfont $font
#print an example text
echo -e $exampleText1 $exampleText2 $exampleText3
#let the user know which font is currently in use
echo -e $red"currently looking at: "$font"\n"$defaultColor
#list the fonts the user has saved
echo -e $listTitle"\n"
for savedfont in ${savedFontsArray[@]}
do
if [ $pos1 -eq $pos2 ] && [ "$highlight" == "true" ];
then
echo -e ">>"$green $savedfont $defaultColor
else
echo -e ">>"$purple $savedfont $defaultColor
fi
let pos2=($pos2+1)
done
#ask the user if he wants to keep going or save/select the font
read -p "wanna look at the next font? "$options": " option
case "$option" in
"n")
broke="true"
break;;
#copies the font name into an array
"save") savedFontsArray+=($font);;
#re-writes the config file using the new font
"select")
#first backo the new file as vconsole.conf.backup
echo "Backing up config file..";
cp $configFile $localCopy".backup"
#set the new FONT= line
newFontOpt=$newFontOpt$font
#remove any past local copies of vconsole.conf
rm $localCopy
#do the rewrite, show the user the new file
echo -e "Writing new config file...\n"
while read line
do
if [ "$line" != "$fontOpt" ]
then
echo $line
echo $line >> $localCopy
else
echo -e $red$newFontOpt$defaultColor
echo $newFontOpt >> $localCopy
fi
done < $localCopy".backup"
echo -en "\nCopying the new config file please supply the "
sudo cp $localCopy $configFile
exit
;;
*)
#by default: keep going
;;
esac
#clear the screen and repeat
clear
#if break signal was sent from case then break here too
if [ "$broke" == "true" ]
then
break
fi
done
#saved the selected font names in a file before exiting
saveSelectedFonts savedFontsArray[@]
#reset the font
setfont
for savedfont in ${savedFontsArray[@]}
do
echo -e ">>"$purple $savedfont $defaultColor
done
read -p "you wanna select a font from this list?: " answer
if [ "$answer" == "yes" ] || [ "$answer" == "y" ];
then
viewSelectedFonts
fi
}
#Writes an array of fonts names into a file the script will use later
saveSelectedFonts(){ #always should recieve an array as argument
#make rom for a savedfonts file if it doesnt exist already
touch $savedFonts
#get the font names from the array that was passed
local fontArray=("${!1}")
#check that no font in the array is already on the file
for font in ${fontArray[@]}
do
echo -n "saving "$font"in fonts file"
sleep 0.05
checkRepeat=$(cat $savedFonts|grep $font)
#if the font is not on the file then copy it
if [ "$checkRepeat" == "" ]
then
#let the user know it was copied
echo -e "\t["$green"OK"$defaultColor"]"
echo $font >> $savedFonts
else
#if it's not there then don't copy and let the user know
echo -e "\t["$red"DUPPLICATED"$defaultColor"]"
fi
done
}
#as viewSystemFonts but takes the font names file with the fonts the user selected
viewSelectedFonts(){
local selectedFontsArray=($(cat $savedFonts))
clear
showcast selectedFontsArray[@]
}
help(){
echo "Usage: vconview [OPTION]"
echo -ne "Tests every console font letting the user choose which ones "
echo -ne "are best, and which one to use\n"
echo "Options"
echo -ne "-s, --select \t lets you look through a selected fonts list "
echo -e "generated by this very script"
echo -e "-h, --help \t shows this message"
}
########################THIS IS WHERE THE EXECUTION STARTS##########################
#it will execute depending on the given argument
#or lack of one
case "$1" in
#Look through the previously selected fonts
"-s" | "--select")
clear
viewSelectedFonts;;
#Show help dialoge
"-h" | "--help")
help;;
#By Default clear the screen and test every systemFont
* )
clear
viewSystemFonts;;
esac
Last edited by Skoglar (2012-12-07 21:33:25)
Offline
Needed a way to sync my music files from one directory to another randomly. I mount my phone via sshfs. Couldn't find a music player that supports this so wrote this script
#!/bin/bash
#clear the console
clear
#create file
touch songlist
#set the variables
proceed=0
dir=0
#create functions
findfiles()
{
#create variables/files that need to be reset with each run of function
filecount=0
dirsize=0
#find files in given directory and pipe the size and full path to nl to add a line number to each entry and create file test
find $dir -type f -printf "\\t%-16s%p\\n" | nl -nln > test;
#cut the line number of the last line of file test and set it to variable file count
filecount=$(cut -f1 test | tail -n1);
#get the size of all the files in a directory
cat test | tr -s " " | cut -f3 | cut -f1 -d " " > test1;
while read file;
do dirsize=$(($file+$dirsize));
done < test1;
rm test1
}
sizes()
{
echo
echo "Total number of files in $dir: $filecount";
echo "Total size of files in $dir: $dirsize bytes";
}
listcreate()
{
#create variables/files that need to be reset with each run of function
touch songlist
nomorefiles=0
entry=0
songsize=0
totalsync=0
syncsong=0
#create a loop to add songs until nomorefiles=1
echo
while [ $nomorefiles != "1" ]
do
#create a list of files to be transfered
#generate a random number between 1 and the file count
entry=$[ ($RANDOM % $filecount ) +1 ]
#use entry to get a song from test file and output only song with full directory note:
#m1 keeps it from getting more than one result. Not perfect though.
syncsong=$(grep -w -m1 $entry test | cut -f3 | cut -b17-)
#use entry to get size of song to be added to folder
songsize=$(grep -w -m1 $entry test | cut -f3 | cut -b1-16)
#check to see if the total size of sync is less than syncsize. If it is then add song to file. If not start copy/rm operation
if [ $totalsync -le $syncsize ]; then
#check to see if file has already been added
grep -x "$syncsong" songlist | grep -qv grep
if [ $? = "1" ];then
#add song
echo $syncsong >> songlist
echo -n "."
#add songsize to total for files add so far
totalsync=$(($totalsync+$songsize))
#if song not added check to see if maybe there are no more files available to be added
elif [ $filecount = $(grep -c "" songlist) ]; then
nomorefiles=1
echo "No more files to add."
else
echo -n ","
fi
#if sync size has been reached set exit status
else
nomorefiles=1
echo
echo
echo "All songs have been added to list."
echo
fi
done
}
#request size of sync set to default if no input
echo -n "How many megs would you like to sync? (default is 4000M) : "
read askline;
if [ -z "${askline}" ];
then
askline=4000
fi
syncsize=$(($askline*1000000))
echo $(($syncsize/1000000))"M will be synced"
#request source directory
srcdir=/home/$(whoami)/documents/Music/
echo
echo "The default source directory is $srcdir"
echo -n "If you would like to change this please provide the source directory: "
read askdir;
if [ -z "${askdir}" ];
then
askdir=$srcdir
fi
srcdir=$askdir
echo
echo "The source directory is set to: $srcdir"
#request destination directory
destdir=/home/$(whoami)/phone/storage/sdcard1/Music/
echo
echo "The default destination directory is $destdir"
echo -n "If you would like to change this please provide the source directory: "
read askdir;
if [ -z "${askdir}" ];
then
askdir=$destdir
fi
destdir=$askdir
echo
echo "The source directory is set to: $destdir"
#check to see if there are files in destdir and delete all or some of them based on input
dir=$destdir
findfiles
sizes
#create loop to perform action based on user input
while [ $proceed != "1" ]
do
echo
echo -n "Would you like to delete some or all of these files (some/all/none): "
read inputline;
if [ -z "${inputline}" ];
then
echo -n "Pls enter some/all/none:"
elif [ $inputline = "some" ];
then
echo -n "How many megabytes of files would you like to delete? "
read delmegs;
echo
echo -n $delmegs"M will be deleted. This amount will also be the amount added back into folder."
echo
syncsize=$((delmegs * 1000000))
listcreate
while read file;
do
rm "$file";
echo -n "-"
done < songlist
echo
proceed=1
elif [ $inputline = "all" ];
then
echo
echo "All files in $destdir will be deleted"
rm -r "$destdir"
mkdir $destdir
echo
echo "All songs in $destdir have been deleted"
proceed=1
else [ $inputline = "none" ];
echo
echo "Files will be left in place"
proceed=1
fi
done
#clean up and reset for next stage
rm test
rm songlist
#find songs in srcdir and create files and variable for loop
dir=$srcdir
findfiles
sizes
listcreate
#copy files to destination folder
#test to make sure destination directory has enough free space. can't use this on sshfs
#if [ $[(($syncsize / 1000) - $(df $destdir | grep /dev/ | tr -s " " | cut -d " " -f4))] -gt "1000" ]; then
# echo "there is enough free space"
# else
# echo "there is not enough free space"
#fi
echo "Total songs that will be added: "$(grep -c "" songlist)
echo
while read file;
do
cp "$file" $destdir;
echo -n "+"
done < songlist
#echo the variables to keep track of what is going on
echo
echo
echo "Source Directory: $srcdir"
echo "Destination Directory: $destdir"
echo "Requested size of sync: "$(($syncsize/1000000))"M"
echo "Actual size of sync: "$(($totalsync/1000000))"M"
#echo "Total files available for sync: $filecount"
#echo "Current line entry being added: $entry"
#echo "Current size of song being added: $songsize"
#echo "Current song being added: $syncsong"
#echo "No more file exit status: $nomorefiles"
#echo "File List:"
#cat songlist
#clean up our temp files
rm songlist
rm test
exit
Offline
Here's "some", which uses source-highlight to colorize text files according to their syntax and then pipes them through less. So, it's basically less with syntax highlighting.
Thank You, I've been hoping to run across something like this for a long time (lazy!).
Bob
Offline