You are not logged in.
Procyon wrote:
@Daenyth: Good idea. You know I find it really silly bash puts that * there.
heh, had this discussion with people in #bash a little while ago.. where i proposed you can just use just use
echo ./*
echo $?
turns out you have to turn on failglob first though(shopt -s failglob) and i just tested now, also dotglob(shopt -s dotglob) if you want to test for .dotfiles
KISS = "It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience." - Albert Einstein
Offline
Can someone give me a little feedback on this mpc script? Any additional feature or bugfixes? http://gist.github.com/77731
EDIT: Perl version with many more features will be coming at some point; check back to the gist now and then. I just have to extend Audio::MPD to support more commands...
Last edited by Daenyth (2009-03-11 22:20:58)
[git] | [AURpkgs] | [arch-games]
Offline
Don't have mpc..(songbird finally supports m4a btw!)
here's the script i use the most
#!/bin/bash
#DESC: Creates a script in proper dir, sets executable perm. and enters with vim. if file already exists open it in vim :-)
function exiT { echo include a scriptname or make a ~/bin dir; exit 1; }
{ cd && cd bin; } 2>/dev/null || exiT
if [ -n "$1" -a ! -f "$1" -a "$#" -eq 1 ]
then
echo \#\!/bin/bash$'\n'\#DESC: "$1" > "$1"
chmod +x "$1"
vim "$1"
elif [ -f "$1" -a -n "$1" ]
then
exec vim "$1"
else
exiT
fi
I was going to post this to Community Contributions and maybe i will.. I have a bad feeling the date stuff could have been done easier though? oh well.
#!/bin/bash
#DESC: rollback. this script doesn't actually rollback anything yet but it gives you $0 number-of-days-back
# of the pacman log and colors it ugly just to be mean.. (;))
shopt -s extglob
if [[ $1 == +([0-9]) ]]
then
yeaR=$(date +%Y)
export LANG=C
p_M=$(date --date="-${1} days"|cut -d " " -f 2)
p_D=$(date --date="-${1} days"|cut -d " " -f 3)
case $p_M in
Jan) p_M=01 ;;
Feb) p_M=02 ;;
Mar) p_M=03 ;;
Apr) p_M=04 ;;
May) p_M=05 ;;
Jun) p_M=06 ;;
Jul) p_M=07 ;;
Aug) p_M=08 ;;
Sep) p_M=09 ;;
Oct) p_M=10 ;;
Nov) p_M=11 ;;
Des) p_M=12 ;;
esac
# COLORS
removeD=$(tput setaf 1)
installeD=$(tput setaf 3)
upgradeD=$(tput setaf 4)
synC=$(tput setaf 5)
fG=$(tput setaf 7)
otheR=$(tput setaf 0)
sed -n "/${yeaR}-${p_M}-${p_D}/,\$p" /var/log/pacman.log| \
sed -e "s/.*/${otheR}&${fG}/" \
-e "s/synchronizing package lists/${synC}&${fG}/" \
-e "s/starting full system upgrade/${synC}&${fG}/" \
-e "s/removed.*/${removeD}&${fG}/" \
-e "s/installed.*/${installeD}&${fG}/" \
-e "s/upgraded.*/${upgradeD}&${fG}/"
# download selected files
else
echo you need to run the program like $(basename "${0}") [daysback]
fi
then there's diffwithcolor because the diff with color perl program didn't work properly(and is like 500 lines or something..)
#!/bin/bash
# diffwithcolor - gives you colored diffs :)
OLD=$(tput setaf 1) # red
SAMELINE=$(tput setaf 4) # blue
NEW=$(tput setaf 2) # green
diff -W 180 -w -y --suppress-common-lines $1 $2|sed "s#\(.*|.*\)#`echo $SAMELINE`&#"|sed "s#\(.*>.*\)#`echo $NEW`&#"|sed "s#\(.*<.*\)#`echo $OLD`&#"
edit: posted the right script #1
Last edited by test1000 (2009-03-17 09:13:42)
KISS = "It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience." - Albert Einstein
Offline
#!/bin/bash
#shutup: stores the volume and temporarily pauses mpd
volume=$(mpc volume | tr -d '[:alpha:]:% ')
cmd=$1
shift
args=("$@")
mpc pause > /dev/null
$cmd "${args[@]}"
mpc volume $volume > /dev/null
mpc play > /dev/null
I use it whenever I'm going to watch something and mpd happens to be running.
Offline
I decided to make a completely graphical script to control every aspect of my Samsung NC10.
Depends on xdialog, which, atleast for me, was a 0.30mb download.
Remember to add your own nameservers if you use 3G! Also, adding the command to your sudoers makes it easy to initiate this command as a lowly user!
Command:
whateveryounameit (completely interactive)
whateveryounameit add|rm|cmd (goes straight to add|rm|cmd)
whateveryounameit add lan (etc, completely automatic and only notifies you with a popup)
#!/bin/sh
touch /dev/shm/nc10;
tempfile=/dev/shm/nc10
title=$0
args=""
param=""
command=""
adder () {
if [ -z $args ]; then
Xdialog --title "$title" --stdout --menubox "What would you like to activate?" 0 0 5 "LAN" "" "WLAN" "" "Bluetooth" "" "3G" "" 1> $tempfile;
command=`cat $tempfile`
else
command=$args
fi
case $command in
LAN|lan)
Xdialog --title "$title" --msgbox "Activated LAN." 0 0 &>/dev/null &
modprobe sky2;
/etc/rc.d/network start;
;;
WLAN|wlan)
Xdialog --title "$title" --msgbox "Activated WLAN." 0 0 &>/dev/null &
modprobe ath5k;
/etc/rc.d/network stop &>/dev/null &
/etc/rc.d/dbus start &>/dev/null &
/etc/rc.d/wicd start &>/dev/null &
;;
Bluetooth|bt)
Xdialog --title "$title" --msgbox "Activated Bluetooth." 0 0 &>/dev/null &
modprobe btusb;
modprobe bluetooth;
;;
3G|3g)
#Xdialog --title "$title" --msgbox "Activated 3G." 0 0 &>/dev/null &
Xdialog --no-cancel --logbox $tempfile 0 0 &>/dev/null &
modprobe ppp-generic;
echo 'nameserver 1.2.3.4' > /etc/resolv.conf;
echo 'nameserver 4.3.2.1' >> /etc/resolv.conf;
wvdial &>$tempfile;
;;
*)
if [ -z $command ]; then
Xdialog --title "$title" --msgbox "Action cancelled!" 0 0 &>/dev/null &
else
Xdialog --title "$title" --msgbox "Invalid action '$command'!" 0 0 &>/dev/null &
fi
;;
esac
}
remover () {
if [ -z $args ]; then
Xdialog --title "$title" --stdout --menubox "What would you like to inactivate?" 0 0 5 "LAN" "" "WLAN" "" "Bluetooth" "" "3G" "" 1> $tempfile;
command=`cat $tempfile`
else
command=$args
fi
case $command in
LAN|lan)
Xdialog --title "$title" --msgbox "Inactivated LAN." 0 0 &>/dev/null &
/etc/rc.d/network stop;
rmmod sky2;
;;
WLAN|wlan)
Xdialog --title "$title" --msgbox "Inactivated WLAN." 0 0 &>/dev/null &
/etc/rc.d/network stop &>/dev/null &
/etc/rc.d/wicd stop &>/dev/null &
/etc/rc.d/dbus stop &>/dev/null &
rmmod ath5k;
;;
Bluetooth|bt)
Xdialog --title "$title" --msgbox "Inactivated Bluetooth." 0 0 &>/dev/null &
rmmod btusb;
rmmod bluetooth;
;;
3G|3g)
Xdialog --no-cancel --logbox $tempfile 0 0 &>/dev/null &
pkill wvdial &>$tempfile &
rmmod bsd_comp;
rmmod ppp_async;
rmmod ppp_deflate;
rmmod zlib_deflate;
rmmod zlib_inflate;
rmmod ppp_generic;
;;
*)
if [ -z $command ]; then
Xdialog --title "$title" --msgbox "Action cancelled!" 0 0 &>/dev/null &
else
Xdialog --title "$title" --msgbox "Invalid action '$command'!" 0 0 &>/dev/null &
fi
;;
esac
}
cmd () {
if [ -z $args ]; then
Xdialog --title "$title" --stdout --menubox "What command would you like to perform?" 15 50 5 "Suspend" "- to RAM" "Hibernate" "- to HDD" "Backlight" "- laptop backlight" "Sound" "- soundlevels" "Powersave" "- set cpufreq to 'powersave'" "OnDemand" "- set cpufreq to 'ondemand'" 1> $tempfile;
command=`cat $tempfile`
else
command=$args
fi
case $command in
Suspend|susp)
Xdialog --title "$title" --msgbox "Suspending to RAM." 0 0 &>/dev/null &
pm-suspend;
;;
Hibernate|hibe)
Xdialog --title "$title" --msgbox "Hibernating to HDD." 0 0 &>/dev/null &
pm-hibernate;
;;
Backlight|back)
Xdialog --title "$title" --stdout --rangebox "Backlight:" 0 0 0 100 30 1> $tempfile;
xbacklight -set `cat $tempfile`
;;
Sound|snd)
Xdialog --title "$0" --stdout --separator " " --3rangesbox "Volume:" 0 0 "Master" 0 100 80 "PCM" 0 100 100 "Front" 0 100 100 1> $tempfile;
#| sed 's/\// /g' 1> $tempfile;
amixer -q set Master unmute
amixer -q set Master `cat $tempfile | awk '{print $1}'`%
amixer -q set PCM `cat $tempfile | awk '{print $2}'`%
amixer -q set Front `cat $tempfile | awk '{print $3}'`%
;;
Powersave)
Xdialog --title "$title" --msgbox "Setting cpufreq to 'powersave'." 0 0 &>/dev/null &
cpufreq-set -g powersave;
;;
OnDemand)
Xdialog --title "$title" --msgbox "Setting cpufreq to 'ondemand'." 0 0 &>/dev/null &
cpufreq-set -g ondemand;
;;
*)
if [ -z $command ]; then
Xdialog --title "$title" --msgbox "Action cancelled!" 0 0 &>/dev/null &
else
Xdialog --title "$title" --msgbox "Invalid action '$command'!" 0 0 &>/dev/null &
fi
;;
esac
}
if [ $# -eq 0 ]; then
Xdialog --title "$title" --stdout --menubox "What action would you like to perform?" 0 0 5 "Add" "" "Remove" "" "Command" "" 1> $tempfile;
param=`cat $tempfile`
else
param=$1
if [ $# -eq 2 ]; then
args=$2
fi
fi
case $param in
Add|add)
adder
;;
Remove|rm)
remover
;;
Command|cmd)
cmd
;;
*)
Xdialog --title "$title" --msgbox "invalid parameter '$1' or operation cancelled." 0 0;
;;
esac
Last edited by initbox (2009-03-15 11:12:52)
Offline
Following scripts are all inspired from other ones here; nothing really original
Use dmenu to play artist
#!/bin/sh
cmd="$(mpc ls | dmenu ${1+"$@"})"
if [ -f ~/Music/"$cmd" ] || [ -d ~/Music/"$cmd" ] && [ -n "$cmd" ]
then
mpc clear & mpc add "$cmd"
mpc play
fi
Use dmenu to select netcfg profile
#!/bin/sh
cmd="$(ls /etc/network.d/ -1Ap | grep -v /\$ | dmenu ${1+"$@"})"
if [ -n "$cmd" ]
then
netcfg -a
netcfg $cmd
fi
mpd/mplayer status; current song playing through mpd or the filename of whats playing in mplayer
#!/bin/bash
title=$(mpc | awk '/-/ {print $0}')
textp=$(mpc | gawk '/play/ {print $3,$4}')
if [ "${#title}" -eq 0 ]
then
mplayer=$(pgrep -d ' ' mplayer)
if [ "${mplayer}" ]
then
proc_file="/proc/$mplayer/cmdline"
title=$(cat $proc_file | sed 's/^mplayer//g')
echo -n "MPlayer: $title"
else
echo -n "Nothing playing"
fi
else
echo -n $title
[ "${#textp}" -eq 0 ] && echo -n " *paused*"
fi
echo ""
dwm bar; prints useful information: song playing, battery, weather, time
#!/bin/bash
counter=0
while true
do
#update the weather every 15 minutes - every 2 seconds it too often
counter=$((counter%900))
flag=""
if [ "$counter" -eq 0 ]
then
weather=$(weatherget -s CAXX0531 -m -f .weatherget-minimalrc)
flag=" *updated*"
fi
xsetroot -name "$(./mpd-stat) :: $(acpi | awk '{ print $3, $4 }' | sed s/","//g) :: $weather$flag :: $(date +"%R - %D")"
sleep 2
counter=$counter+2
done
script to enable some agressive power saving features. really helps battery life. when turned on with the wireless off, powertop reports 10W, which translates to a comfortable 4 hours of battery life.
#!/bin/bash
case $1 in
"off")
# backlight
echo 8 > /sys/class/backlight/acpi_video0/brightness
# harddrive settings
echo 0 > /proc/sys/vm/laptop_mode
echo 10 > /proc/sys/vm/dirty_ratio
echo 5 > /proc/sys/vm/dirty_background_ratio
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
# soundcard settings
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
# network settings
ethtool -s eth0 autoneg on speed 1000 > /dev/null
ethtool -s eth0 wol d > /dev/null
# hal settings
hal-disable-polling --device /dev/cdrom --enable-polling > /dev/null
;;
"on")
# backlight
echo 0 > /sys/class/backlight/acpi_video0/brightness
# harddrive settings
echo 5 > /proc/sys/vm/laptop_mode
echo 40 > /proc/sys/vm/dirty_ratio
echo 10 > /proc/sys/vm/dirty_background_ratio
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
# soundcard settings
echo 10 > /sys/module/snd_hda_intel/parameters/power_save
# network settings
ethtool -s eth0 autoneg off speed 100 > /dev/null
ethtool -s eth0 wol d > /dev/null
# hal settings
hal-disable-polling --device /dev/cdrom > /dev/null
;;
esac
Offline
I've updated some of my MPD stuff:
http://github.com/Daenyth/dotfiles/tree/master/bin/np
http://github.com/Daenyth/dotfiles/tree … /bin/mdctl
[git] | [AURpkgs] | [arch-games]
Offline
Small edit to my atq replacement, now it will display the remaining amount of hours:minutes:seconds instead of the day and time.
So
-00:37:30> echo test
And once again it needs read & execute permission of /var/spool/atd, and it is currently set to only display one line of the command too.
#! /bin/bash
for file in /var/spool/atd/*; do
[ ! -f "$file" ] && echo no atd jobs && exit
awk -W non-decimal-data '{time=$1*60 - systime(); minutes=time%3600/60; hours=time/60/60; seconds=time%60;printf "-%02d:%02d:%02d> ",hours,minutes,seconds }' <<< "0x$(cut -b22- <<< $file)"
sed -n '/}/{n;p}' "$file"
done
edit: fixed hour and minute display
Last edited by Procyon (2009-03-23 14:55:24)
Offline
This thread has some really great stuff in it, stuff that is the reason why I love to use linux - custom scripting that doesnt suck!
I realize im not the first to think having a central repository for this would be a good idea. There is the script wiki. But no offense to whoever made the script wiki but it kinda sucks. Its hard to navigate and use because it hasn't really be modified at all. So I present to you:
http://www.toxiccode.com/sscript.php
Its very streamlined and designed for the purpose, I coded it from scratch using PHP (if anyone wants to see the source let me know )
Pick out a username and pass and you can post your scripts/config files/ other stuff as well as rate and comment on others.
I will be adding more features soon such as user pages, search and sortby links. Hope you guys like it.
I took some of the scripts and added them to the page to get it started, giving full credit to the original authors. If I posted your script and you want me to take it down just let me know.
Of course feedback is always welcome and desired.
Offline
I know some people wanted something like this some time ago and I decided to practice bash arithmetics, so here you go:
This program executes some action once the current song playing in your mpd is finished.
For example: lolscript "shutdown -h now" - remember the quotes!
#!/bin/sh
#### MPD song changing action ####
#### execute a command when mpd changes songs ####
#### Usage: commandname "command"; for example: mympdscript "shutdown -h now" ####
min1=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $1}'`
min2=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $3}'`
s1=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $2}'`
s2=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $4}'`
rdy=
cmd=$1
while [ $min1 -ne 0 ]; do
let s1=$s1+60
let min1=$min1-1
done
while [ $min2 -ne 0 ]; do
let s2=$s2+60
let min2=$min2-1
done
let rdy=$s2-$s1
sleep $rdy; $cmd
Offline
@initbox: I wrote a very similar script here, with a few more features as well. But as someone who doesn't know awk at all, I don't understand your script. Does it handle song changes when the next song has an identical title and artist? Because I have been trying to figure out how to do that without complicating my script too much (and also without requiring too much effort).
Online
@initbox: I wrote a very similar script here, with a few more features as well. But as someone who doesn't know awk at all, I don't understand your script. Does it handle song changes when the next song has an identical title and artist? Because I have been trying to figure out how to do that without complicating my script too much (and also without requiring too much effort).
My script just counts when the current song ends and then executes something. It's very simple ^^
Awk is only used to parse the track elapsed/length from mpc status.
Offline
I've got a really simple, but very effective script. Well, it's not technically even a script...
lsi - case insensitive ls (place in ~/.bashrc)
alias lsi='ls | grep -i'
Example usage:
socrates@localhost ~/Shared/audio $ lsi redman
De La Soul ft.Redman - Oooh.mp3
Keith Murray - Yeah, Yeah, You Know It (feat. Erick Sermon & Redman).mp3
LL Cool J - 4, 3, 2, 1 (Feat. Method Man, Redman, Canibus & DMX).mp3
Method Man & Redman - Broken Language 2008.mp3
Method Man & Redman - Lets Get Dirty.mp3
Method Man & Redman feat. Damian Marley (Jr. Gong) - Lyrical .44.mp3
Method Man, Redman, & Busta Rhymes - Simon Says Remix .mp3
Methode Man & Redman - Americas Most.mp3
Redman - Cant Wait.mp3
Redman - Ill Be Dat.mp3
Redman feat. Busta Rhyme - Da Goodness.mp3
WEED SMOKER - Styles P feat Jin, Redman & Method Man - Good Times (I Get High) unreleased remix.mp3
Offline
You can get the same behavior by «ls *redman*», assuming that you have nocaseglob set.
[git] | [AURpkgs] | [arch-games]
Offline
Here's another script!
This one leverages the previous mpd-action script as a function.
It will execute a command when your mpd playlist ends. Sometimes it whines about errors and sometimes it doesn't, but it works every time so I don't really care.
scriptname "echo yay finished playing!"
#!/bin/sh
#### Wait until mpd playlist ends and execute action ####
#### example: scriptname "echo yay finished playing!" ####
last=`mpc playlist | wc -l`
action=$1
sleeper () {
min1=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $1}'`
min2=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $3}'`
s1=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $2}'`
s2=`mpc status | awk 'NR==2' | awk '{print $3}' | tr "[:,/]" " " | awk '{print $4}'`
end=
while [ $min1 -ne 0 ]; do
let s1=$s1+60
let min1=$min1-1
done
while [ $min2 -ne 0 ]; do
let s2=$s2+60
let min2=$min2-1
done
let end=$s2-$s1
sleep $end
}
while [[ $np != $last ]]; do
np=`mpc | awk 'NR==2' | tr -d '[A-Za-z\#]' | sed 's/\// /g' | awk '{print $1}'`
sleeper
done
sleeper
$action
Offline
Eep.. where to begin... I'll take a little time and remake that for you
EDIT: Nevermind.. I'd recommend a total rewrite of it from scratch. Probably in pure awk or perl. (I'd use perl + Audio::MPD)
Last edited by Daenyth (2009-03-20 14:38:54)
[git] | [AURpkgs] | [arch-games]
Offline
Eep.. where to begin... I'll take a little time and remake that for you
EDIT: Nevermind.. I'd recommend a total rewrite of it from scratch. Probably in pure awk or perl. (I'd use perl + Audio::MPD)
Hehe, I can't program Perl at all.
But yeah, I guess it's a sucky script, kind of. I'm just trying to do random bash scripts so I can practice.
I'd actually really like to start programming, but trying to figure out something to program is a tedious task. I like bash scripting, it's kind of like writing simple websites, you can see the results immediately and you can actually do something useful as well. But then again I really, REALLY want to learn programming, it's just that I don't really like writing useless programs just for the sake of it.
(Random babbling, heh.)
Offline
Look at project Euler... it might be a handy place to start.
[git] | [AURpkgs] | [arch-games]
Offline
This thread has some really great stuff in it, stuff that is the reason why I love to use linux - custom scripting that doesnt suck!
To be fair Windows has shellscripting too (WSH/Powershell/Python/PHP/etc..). But with bash combined with all the commandline tools you can do a lot in a few lines of code that would take a whole page of those other scripting languages.
Offline
To be fair Windows has shellscripting too (WSH/Powershell/Python/PHP/etc..). But with bash combined with all the commandline tools you can do a lot in a few lines of code that would take a whole page of those other scripting languages.
Yeah, this is true. I memorized the following single line batch script during my high school networking class. Since Windows doesn't have an IP scanner by default, I created this for simple host discovery. It scans an entire Class C network range. More loops can be added for class B or A, obviously.
( for /l %a in (1,1,254) do ( for /f %b in ('ping -n 1 -w 1 192.168.1.%a') do ( if "%b" equ "Reply" ( echo 192.168.1.%a>>tmp )))) && ( cls && echo Found && type tmp && del tmp )
Offline
Why not just install nmap?
[git] | [AURpkgs] | [arch-games]
Offline
a better df
#!/bin/bash
# newdf - a friendlier version of df
sedscript="/tmp/newdf.$$"
trap "rm -f $sedscript" EXIT
cat << 'EOF' > $sedscript
function showunit(size)
{ mb = size / 1024; prettymb=(int(mb * 100)) / 100;
gb = mb / 1024; prettygb=(int(gb * 100)) / 100;
if ( substr(size,1,1) !~ "[0-9]" ||
substr(size,2,1) !~ "[0-9]" ) { return size }
else if ( mb < 1) { return size "K" }
else if ( gb < 1) { return prettymb "M" }
else { return prettygb "G" }
}
BEGIN {
printf "%-27s %7s %7s %7s %8s %-s\n",
"Filesystem", "Size", "Used", "Avail", "Capacity", "Mounted"
}
!/Filesystem/ {
size=showunit($2);
used=showunit($3);
avail=showunit($4);
printf "%-27s %7s %7s %7s %8s %-s\n",
$1, size, used, avail, $5, $6
}
EOF
df -k | awk -f $sedscript
exit 0
Offline
Why not just install nmap?
I carried around a thumb drive with nmap and much more when I could, but this works well if you're caught without any tools and no Internet access.
Offline
I present to you torso, the missing link between "head" and "tail"
Usage: torso N [-n M] [FILE]
Prints M lines (default 10) from FILE (or STDIN if FILE is not given), starting at line N
[git] | [AURpkgs] | [arch-games]
Offline
I really like this idea, how would I use it though? Add to .bashrc or have as separate script?
Thanks
Here's my version of the filetype-agnostic extractor... Dependencies are pacman, bzip2, gzip, p7zip. It also supports tar, gzip, bzip2, cpio, zip, 7zip, rar. Probably others as well..
ex() { for file in "$@"; do if [ -f "$file" ]; then local file_type=$(file -bizL "$file") case "$file_type" in *application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*) bsdtar -x -f "$file" ;; *application/x-gzip*) gunzip -d -f "$file" ;; *application/x-bzip*) bunzip2 -f "$file" ;; *application/x-rar*) 7z x "$file" ;; *application/octet-stream*) local file_type=$(file -bzL "$file") case "$file_type" in 7-zip*) 7z x "$file" ;; *) echo -e "Unknown filetype for '$file'\n$file_type" ;; esac ;; *) echo -e "Unknown filetype for '$file'\n$file_type" ;; esac else echo "'$file' is not a valid file" fi done }
Offline