Du bist nicht angemeldet.
Wo denn mächtiger? Laut Source Code greift atool auch nur auf die installierten Packer zurück.
(rar|RAR|zip|ZIP|tar.gz|tgz|tar.bz|tbz|tar.Z|tZ|tar.lzo|tzo|tar.7z|t7z|tar|jar|JAR|war|lha|lzh|7z|ace|ACE|arj|ARJ|a|arc|ARC|rpm|deb|gz|bz|bz2|Z|lzo|cpio)
Die "kleine Funktion" könnte ebenfalls zu jedem Packformat erweitert werden Was kann atool also mehr?
Offline
Das Problem an der Funktion ist, dass man die Kommandos verlernt:
www-data@virtualhostxy ~ $ extract blabla.tar.gz
bash: command not found: extract
www-data@virtualhostxy ~ $ ?????
Offline
Wo denn mächtiger? Laut Source Code greift atool auch nur auf die installierten Packer zurück.
(rar|RAR|zip|ZIP|tar.gz|tgz|tar.bz|tbz|tar.Z|tZ|tar.lzo|tzo|tar.7z|t7z|tar|jar|JAR|war|lha|lzh|7z|ace|ACE|arj|ARJ|a|arc|ARC|rpm|deb|gz|bz|bz2|Z|lzo|cpio)
Die "kleine Funktion" könnte ebenfalls zu jedem Packformat erweitert werden Was kann atool also mehr?
atool extrahiert nicht nur anhand der Dateiendung sondern kann auch noch file nutzen falls die Dateiendung nicht stimmt.
Offline
function say() { mplayer -really-quiet "http://translate.google.com/translate_tts?tl=de&q=$1" }
Beschwert sich bei mir über unerwartetes Ende der .bashrc damit. Ein ; mehr und es geht:
function say() { mplayer -really-quiet "http://translate.google.com/translate_tts?tl=de&q=$1"; }
Danke, lustige Spielerei!
Offline
Was ich mich gerade frage … In der Realität. Mit wie vielen verschiedenen Paketformaten müssen wir da umgehen?
Spontan fallen mir tar.gz, rar und zip ein, die ich benutze. Das sind drei Befehle (tar -xf, unrar x, unzip), die kann ich mir gerade noch merken *g*
Offline
Wenn ich größere Daten archiviere nutze ich auch bz2 oder xz.
Offline
Was ich mich gerade frage … In der Realität. Mit wie vielen verschiedenen Paketformaten müssen wir da umgehen?
Spontan fallen mir tar.gz, rar und zip ein, die ich benutze. Das sind drei Befehle (tar -xf, unrar x, unzip), die kann ich mir gerade noch merken *g*
nicht alles, was gz hat, hat auch nen tar davor: gunzip
Beitrag geändert von midixinga (21.08.2014 13:04:56)
Offline
nicht alles, was gz hat, hat auch nen tar davor: gunzip
Ich kann da nur für mich sprechen, was anderes als tar.gz ist mir bisher mit gz am Ende noch nicht untergekommen (oder wenn, dann so selten, dass ich das längst wieder vergessen habe).
Offline
midixinga schrieb:nicht alles, was gz hat, hat auch nen tar davor: gunzip
Ich kann da nur für mich sprechen, was anderes als tar.gz ist mir bisher mit gz am Ende noch nicht untergekommen (oder wenn, dann so selten, dass ich das längst wieder vergessen habe).
logrotate z.B. komprimiert per default alles mit gzip
Offline
dann gibt es noch 7zip (7z), das ich auch häufiger mal benutze, weil es meiner Erfahrung nach meistens dichter packt als zip (und ich in meinem sozialen Umfeld Windosen hab, ergo fallen Dinge wie gz und xz raus).
Offline
logrotate z.B. komprimiert per default alles mit gzip
Ich bin so forsch, dass ich behaupte, es eh nie zu brauchen, und logge daher nicht
Ich selbst nutze nur tar.gz zum packen, da es mir dabei nicht darauf ankommt, möglichst gut zu komprimieren (bereits komprimierte Daten lassen sich eh nur sehr schlecht komprimieren *g*), sondern möglichst kompatibel mehrere Dateien auf einen Schlag bereit zu stellen, und beim Archivieren Inodes zu sparen.
Offline
Aber Manpages hast du noch, Dirk?
Offline
… ich nutze sie sogar hin und wieder
Offline
Meine Neueste um das Abdunkeln meines Bildschirms beim Schauen von laengeren Videos zu vermeiden:
# Fake mouse events
fake-mouse-event() {
while true
do
xdotool key VoidSymbol
sleep 2m
done
}
Offline
Meine Neueste um das Abdunkeln meines Bildschirms beim Schauen von laengeren Videos zu vermeiden:
Statt setzen der entsprechenden dpms-Einstellungen?
Offline
Jep, ich nutze xfce4-power-manager fuer erweiterte Bildschirmeinstellungen. Das simple Deaktivieren von dpms war bei mir nicht ausreichend, um das Abdunkeln zu verhindern.
Keine Ahnung, was der Power Manager da im Hintergrund genau macht.
Offline
Kurzes Skript zum Erstellen von Thumbnails von Videos:
Need: ffmpeg imagemagick
#!/bin/bash
# Define the count of screens (screens are arranged by 4x4)
screens=16
# Iterate over all given parameters
for file in "$@"
do
inputFile="$(realpath "$file")"
if [ ! -e "$inputFile" ]
then
echo "Fail: Not exist: $file"
continue
fi
resultFile="$(dirname "$inputFile")/screen-$(basename "$inputFile" | sed -r 's/"//').jpg";
echo "Input: $inputFile"
echo "Output: $resultFile"
if [ -e "$resultFile" ]
then
echo "Exists"
continue
fi
# Delete old files
rm -f capture-*.jpg result.jpg "\"$resultFile\""
# Get the duration in seconds
durSec=$(ffmpeg -i "$inputFile" 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')
echo "Duration: $durSec"
# Calculate the seconds for a step
stepSec=$(echo "($durSec / ($screens + 1))" | bc -l)
echo "Step sec: $stepSec"
# Create for each step * secs per step a screen
for i in $(seq -w 1 $screens);
do
frameSec=$(echo "($stepSec * $i)" | bc -l)
ffmpeg -ss $frameSec -i "$inputFile" -vf scale=-1:240 -frames:v 1 capture-$i.jpg &> /dev/null
sec=$(echo "($frameSec % 60)" | bc | awk '{printf("%02d\n",$0+=$0<0?0:0.9)}')
min=$(echo "(($frameSec / 60) % 60)" | bc | awk '{printf("%02d\n",$0+=$0<0?0:0.9)}')
hrs=$(echo "(($frameSec / 3600) % 60)" | bc | awk '{printf("%02d\n",$0+=$0<0?0:0.9)}')
if [ -e capture-$i.jpg ]
then
montage -label "$hrs:$min:$sec" capture-$i.jpg -geometry +5+5 -background White capture-$i.jpg &> /dev/null
echo "Screen $i: $hrs:$min:$sec"
else
echo "Fail: $inputFile"
continue 2
fi
done
# Combine the screens to one file
montage -title $(basename "$inputFile") -geometry +4+4 capture*.jpg "$resultFile" &> /dev/null
echo "Done"
# Remove temporary files
rm -f capture-*.jpg
done
Offline
Recursiv einen string/regexp in Dateien finden
_fs() { #$1: name, $2: search regexp, $3: file or directory
name=$1
grep_opts=-RIne
[ "$name" = "fsi" ] && grep_opts=-RIine
shift
[ $# -lt 1 ] && { echo "usage: $name <regexp> [<directory or file>]"; return; }
[ -z "$2" ] && 2=$(pwd)
egrep $grep_opts "$1" "$2" #2> /dev/null
}
# find string in files recursively
fs() { #$1: search regexp, $2: file or directory
_fs "$0" $@
}
# find string in files recursively (case insensitive)
fsi() { #$1: search regexp, $2: file or directory
_fs "$0" $@
}
fsi match case-insensitive, fs case-sensitive. Usage ergibt sich denke ich aus dem code. Ohne 2. argument sucht man in $PWD.
Offline
#!/bin/sh
# Extrahiert via ffmpeg aus Video- und Audiodateien –
# – die Tonspur und erzeugt daraus eine MP3-Datei
# -> als Aktion/Skript für Thunar, PCMan, Nautilus, Nemo
# Voreinstellungen:
# Gewünschte Bitrate wählen (192k|224k|256k):
kbit="224k"
# Einblenddauer Hinweise wählen (Millisekunden):
ms=5000
# Skript:
# Name Quelldatei
file=$( basename "$1")
# MIME-Type Quelldatei
mime=$( file -Lb --mime-type "$file" && file -Lb "$file" )
# Fängt Verzeichnisse ab
if [ -d "$file" ]
then
notify-send -t $ms --icon=dialog-warning \
"Bitte eine Video- oder Audiodatei wählen." \
"<i>$file</i> ist ein Verzeichnis."
exit
# Fängt verwaiste Symlinks ab
elif [[ -L "$file" ]] && [[ ! -a "$file" ]]
then
notify-send -t $ms --icon=dialog-warning \
"Das Verknüpfungsziel existiert nicht:" \
"<i>$file</i>"
exit
# Bei Quelldatei mit geeignetem MIME-Type wird die Routine abgearbeitet
# Name Zieldatei:
# sed 1: Entfernt '\<>?|*:&"~', Leerzeichen und Lückenbüßer
# sed 2: Endungsentfernung für Ersetzung mit .mp3
# sed 3: YouTube-Bereinigung -> " ▶-Musik-[720p]" zu "Musik"
# if: Weist Dateinamen zu, falls nach Bereinigung leer
# Weil's je nach Dateigröße dauern kann, Meldung wenn fertig
elif echo "$mime" | grep -Eiq "video|audio"
then
ext=".mp3"
target=$( echo "$file" \
| sed 's/[\<>?|*:&"~]/ /g;s/\ /-/g;s/-\+/-/g;s/-_/_/g;s/_-/_/g;s/_\+/_/g' \
| sed -r 's/(.*)\.(.*)/\1/' \
| sed 's/\[.*\]//;s/^[ \t▶_-]*//;s/[ \t_-]*$//' )
if [ -z "$target" ] ; then target="$USER-MP3-Datei" ; fi
ffmpeg -i "$file" -vn -ar 44100 -ac 2 -ab $kbit -f mp3 $target$ext
notify-send -t $ms --icon=dialog-information \
"Die MP3-Datei ist fertig:" \
"<i>$(du --si $target$ext | sed 's/\t/ ➜ /g')</i>"
else
notify-send -t $ms --icon=dialog-warning \
"Dies ist keine Audio- oder Videodatei:" \
"<i>$file</i>"
fi
Gruß, Werner
Edit 27.06.2015 – Kleine Detailverbesserungen:
Einblenddauer Hinweise einstellbar, hässliche YouTube-Dateinamen werden bereinigt.
Edit 05.07.2015 – Problematische Sonderzeichen in Dateinamen werden gefiltert – '\<>?|*:&"~'
Beitrag geändert von Werner (05.07.2015 12:55:04)
Offline
Auch mal was von mir.
Falls man kein Auto hat:
#! /bin/bash
# Call function
call_site() {
$BROWSER "http://www.efa.de/gvh/index.jsp?sessionID=0&itdDateDay=$DATE_DAY&command=&itdLPxx_extLogo=efaportal&itdTripDateTimeDepArr=$TRIP_TYPE&itdTimeHour=$TIME_HOUR&itdDateYear=$DATE_YEAR&language=de&itdTimeMinute=$TIME_MINUTE&type_destination=stop&type_origin=stop&name_origin=$O_PLACE&execInst=normal&requestID=0&itdDateMonth=$DATE_MONTH&name_destination=$D_PLACE&place_origin=$O_CITY&ptOptionsActive=0&place_destination=$D_CITY" &
}
# Defaults
BROWSER=/usr/bin/firefox
TIME=`date +%T`
O_CITY="Hannover"
O_PLACE="Fenskestraße"
D_CITY="Hannover"
D_PLACE="Christuskirche"
CFG_FILE=""
DATE=`date +%D`
TRIP_TYPE="dep" # Possible values: "arr" for arrival and "dep" for departure
ABOUT="`basename $0` - get timetable information from efa.de"
USAGE="Usage: `basename $0` [ ARGS.. ]
--browser BROWSER Use BROWSER as webbrowser
--time TIME Use TIME formatted like HH:MM[:SS] as time
--date DATE Use DATE formatted like MM/DD/YYYY as date
--ocity CITY Use CITY as city of origin
--oplace PLACE Use PLACE as place of origin
--dcity CITY Use CITY as city of destination
--dplace PLACE Use PLACE as place of destination
--trip-type TYPE Use TYPE of \"dep\" or \"arr\" to specify departure or arrival
--cfg | --file FILE Use FILE as configuration file (experts only)
(C) 2012 Richard Neumann under the terms of the GPL"
# Parse arguments
while (( $# )); do
case $1 in
--browser) BROWSER=$2
shift
;;
--time) TIME="$2"
shift
;;
--date) DATE=$2
shift
;;
--ocity) O_CITY=$2
shift
;;
--oplace) O_PLACE=$2
shift
;;
--dcity) D_CITY=$2
shift
;;
--dplace) D_PLACE=$2
shift
;;
--trip-type) TRIP_TYPE=$2
shift
;;
--cfg|--file) CFG_FILE=$2
shift
;;
--help|-h) echo -e "$ABOUT\n\n$USAGE"
exit 0
;;
*) echo -e "ERROR:\tUnknown argument \"$1\"\n\n$USAGE" 1>&2
exit 1
esac
shift
done
# Load configuration file if specified
if [ -n "$CFG_FILE" ]; then
if [ -f $CFG_FILE ]; then
source $CFG_FILE
else
echo -e "WARNING:\tConfiguration file could not be found." 1>&2
exit 1
fi
fi
# Format time and date
TIME_HOUR=`echo $TIME | cut -d ":" -f 1`
TIME_MINUTE=`echo $TIME | cut -d ":" -f 2`
DATE_YEAR=`echo $DATE | cut -d "/" -f 3`
DATE_MONTH=`echo $DATE | cut -d "/" -f 1`
DATE_DAY=`echo $DATE | cut -d "/" -f 2`
# Open EFA-Site
call_site
Oder Privatsphären-paranoid ist:
#! /bin/bash
HIST_DIR="$HOME/.config/google-chrome/Default"
HISTORY="${HIST_DIR}/History"
HISTORY_JOURNAL="${HIST_DIR}/History-journal"
CHROME_PROCESS="chrome"
GRACE_TIME=3
# First shutdown chrome
read -p "All Google Chrome instances will be closed now.
Press [Enter] to continue..."
killall ${CHROME_PROCESS} 2> /dev/null
rm -f ${HISTORY}
rm -f ${HISTORY_JOURNAL}
read -p "Google Chrome must be started for a short time
in order to generate a default history.
It will automatically be closed after ${GRACE_TIME} seconds.
Press [Enter] to continue..."
google-chrome > /dev/null 2>&1 & sleep ${GRACE_TIME}
killall ${CHROME_PROCESS}
chmod -w ${HISTORY}
chmod -w ${HISTORY_JOURNAL}
echo "All done!"
Offline
Verwende ich ständig:
sleepin
-----------------
#!/bin/bash
echo -e "$(date +%T) |\c"
echo "The system suspends to RAM in $1."
sleep $1
systemctl suspend
-------------------
$ sleepin 5m
04:32:02 |The system suspends to RAM in 5m.
sleepafter
---------------------
#!/bin/bash
[ -z "$1" ] && echo -e "$0 needs the name of a running process as argument.\n" && exit
while [ -n "$(pgrep $1)" ]; do
sleep 5s
done
sleep 5s
systemctl suspend
Mal noch ein kleines Wrapperskript für Photorec - für die USB-Stick-Stalker unter euch ^^
$HOME/bin/usb-sniffer
-----------------------
#!/bin/bash
usbdrive=/dev/sdb
homedir=$HOME
## check if 'testdrive' is installed
if [ ! -e /bin/photorec -o ! -e /sbin/photorec ]; then
echo "Please install the package \'testdrive\'."
exit
fi
## if a thumb drive is plugged, start photorec
while true; do
if [ -e $usbdrive ]; then
## do nothing if photorec is already running
if pgrep photorec > /dev/null; then
sleep 0.2
## start photorec if it isn't running yet
else
recdir=$homedir/.usb-sniffer/rec_$(date +%Y%m%d-%H%M%S)
mkdir -p $recdir; cd $recdir
photorec /d ./ /cmd $usbdrive wholespace,search &
fi
else
## kill photorec if it is still running
pgrep photorec > /dev/null && kill -15 $(pgrep photorec) && echo -e "\nAll the files have been saved to:\n$recdir\n"
sleep 0.2
fi
done
---------------------------------------------------------------
$ chmod 4700 usb-sniffer
$ alias usb-sniffer='sudo usb-sniffer'
$ usb-sniffer
if [ ! -e /bin/photorec -o ! -e /sbin/photorec ]; then
"which photorec" zeigt dir, wo das Binary liegt. Wenn /bin, /sbin endlich gelöscht werden, musst du das Skript dann nicht nochmal ändern ;-)
Stimmt, dann so:
$HOME/bin/usb-sniffer
-----------------------
#!/bin/bash
usbdrive=/dev/sdb
homedir=$HOME
## check if 'testdrive' is installed
if ! which photorec > /dev/null 2>&1; then
echo "Please install the package \'testdrive\'."
exit
fi
## if a thumb drive is plugged, start photorec
while true; do
if [ -e $usbdrive ]; then
## do nothing if photorec is already running
if pgrep photorec > /dev/null; then
sleep 0.2
## start photorec if it isn't running yet
else
recdir=$homedir/.usb-sniffer/rec_$(date +%Y%m%d-%H%M%S)
mkdir -p $recdir; cd $recdir
photorec /d ./ /cmd $usbdrive wholespace,search &
fi
else
## kill photorec if it is still running
pgrep photorec > /dev/null && kill -15 $(pgrep photorec) && echo -e "\nAll the files have been saved to:\n$recdir\n"
sleep 0.2
fi
done
---------------------------------------------------------------
$ chmod 4700 usb-sniffer
$ alias usb-sniffer='sudo usb-sniffer'
$ usb-sniffer
Das mache ich immer, wenn es ein Update der Mirrorlist gab:
sed -e "/## Germany/,/^$/ { s/#Server/Server/ }" /etc/pacman.d/mirrorlist.pacnew > /etc/pacman.d/mirrorlist
Das macht zwischen "## Germany" und der nächsten Leerzeile alle Kommentare weg, d.h. stellt diese Server auf aktiv.
Ich hätte auch noch eine weitere Variante zu bieten, die alles außer dem oben beschriebenen Bereich ganz wegwirft:
sed -n -e "/## Germany/,/^$/ { s/#Server/Server/; p }" /etc/pacman.d/mirrorlist.pacnew > /etc/pacman.d/mirrorlist
Wer die Überschrift und den "deutsche Server" Block haben will, kann auch das da machen:
sed -n -e "1,/^$/ p; /## Germany/,/^$/ { s/#Server/Server/; p }" /etc/pacman.d/mirrorlist.pacnew > /etc/pacman.d/mirrorlist
Zum Ausprobieren wie das Ergebnis aussieht, einfach den letzten Teil ab dem ">" weglassen.
Gruß,
Markus
Offline