obviously requires ffmpeg in PATH, I use the Windows binaries from here: https://github.com/BtbN/FFmpeg-Builds/releases
Get-ChildItem -Filter '*.flac' ".\inflacfilesdir\" | ForEach-Object { ffmpeg -i $_.FullName -c:a libmp3lame -q:a 0 -map_metadata 0 ".\outmp3filesdir\$($_.Basename).mp3" }
- -c:a libmp3lame = use lame encoder
- -q:a 0 = equivalent to lame V0 VBR
- -map_metadata 0 = copy metadata tags, including embedded album art
- inflacfilesdir and outmp3filesdir should be modified to point to corresponding directories. They can also be set to the same value if you want the .mp3 files to be created in the same place as the .flac files.
This script will find all .rar files in a given directory and extract them into the specified directory. Requires the unrar binary installed in PATH.
usage: unrar-recursive.sh [directory to scan] [extraction destination dir]
- Running the script without arguments will search for all .rar files in the current directory and subdirectories and extract them all to the current working directory.
- Running the script with only 1 argument will search for all .rar files in the specified directory and extract them into the same directory.
#!/bin/bash
if [ "$#" -eq 0 ]; then dest=$1; else dest=$2; fi
find $1 -type f -iname "*.rar" -exec unrar e {} $dest \; |
#!/bin/bash
if [ "$#" -eq 0 ]; then dest=$1; else dest=$2; fi
find $1 -type f -iname "*.rar" -exec unrar e {} $dest \;
Sources:
It’s a bit of a pain having to run upgrades on all servers. I could of course, set up unattended upgrades, but I always liked initiating the upgrade process myself. So I wrote a little bash script that will initiate apt-get update and apt-get upgrade on all running OpenVZ containers.
Note that this only works for Debian-based distros. So Debian, *buntu, Linux Mint and the like.
It’s very rough, no error-handling or safeguards, so use at your own risk. Works for me, but YMMV.
#!/bin/bash
#Delete temp file
rm /tmp/tmp-script.sh
#Get running VZ
CTIDS=$(vzlist | awk '{print $1}' | sed -e '/CTID/d' -e ':a;N;$!ba;s/\n/ /g' )
# Echo list of running IDs
echo "$CTIDS"
CTIDarray=($CTIDS)
for x in ${CTIDarray[@]}
do
echo "#/bin/bash" > /tmp/tmp-script.sh
chmod +x /tmp/tmp-script.sh
echo vzctl exec $x "apt-get update &&; apt-get -y upgrade" >> /tmp/tmp-script.sh
screen -d -m /tmp/tmp-script.sh
done
#Delete temp file
rm /tmp/tmp-script.sh
#Show running screens
screen -x |
#!/bin/bash
#Delete temp file
rm /tmp/tmp-script.sh
#Get running VZ
CTIDS=$(vzlist | awk '{print $1}' | sed -e '/CTID/d' -e ':a;N;$!ba;s/\n/ /g' )
# Echo list of running IDs
echo "$CTIDS"
CTIDarray=($CTIDS)
for x in ${CTIDarray[@]}
do
echo "#/bin/bash" > /tmp/tmp-script.sh
chmod +x /tmp/tmp-script.sh
echo vzctl exec $x "apt-get update &&; apt-get -y upgrade" >> /tmp/tmp-script.sh
screen -d -m /tmp/tmp-script.sh
done
#Delete temp file
rm /tmp/tmp-script.sh
#Show running screens
screen -x
First, we rm the /tmp/tmp-script.sh. Starting off with very bad form, I know, feeling lazy right now. Then I use awk and sed to get the IDs of running containers from the output of the vzlist command, and place them on a single line, separated by spaces. Those IDs are than put in an array, so that the update command can be called using a for loop.
For some reason, I couldn’t get screen to launch the
vzctl exec $x "apt-get update && apt-get -y upgrade" |
vzctl exec $x "apt-get update && apt-get -y upgrade"
command directly, hence the hideous use of a temp file. If anyone can fix/improve this, I would be glad to hear from you!
This script will read the container ID from the file name, and use it to restore the tgz dump to the same ID on the new OpenVZ/Proxmox server.
Note that this only works if the default name for the vzdumps is kept, and it only works for the next 89 years, because I’m lazy.
Thanks to
http://www.cyberciti.biz/faq/bash-loop-over-file/ and http://bashcurescancer.com/10-steps-to-beautiful-shell-scripts.html
#!/bin/bash
VZDUMPS=/path/to/backups/*.tgz
for f in $VZDUMPS
do
f2=${f#*openvz-}
VEID=${f2%-20*}
echo "Restoring $f to $VEID"
vzrestore $f $VEID
done |
#!/bin/bash
VZDUMPS=/path/to/backups/*.tgz
for f in $VZDUMPS
do
f2=${f#*openvz-}
VEID=${f2%-20*}
echo "Restoring $f to $VEID"
vzrestore $f $VEID
done
Yesterday I installed Wine 1.1 on my Mac using MacPorts. It works great, however it’s not as well integrated as wine on Linux or CrossOver on Mac. What I mean by this is that it’s not possible to double-click a Windows EXE and have it open with wine. So I made a quick and dirty app using Platypus (http://www.sveinbjorn.org/platypus) to allow me to launch Windows executables directly from Finder.
WineLauncherOSX
For unix-like systems (Mac OS X, Linux). A simple shell script to convert flac to lame mp3.
Install flac, lame and id3tool
#!/bin/bash
for a in *.flac
do
OUTLAME=`echo "$a" | sed s/\.flac$/.mp3/g`
ARTIST=`metaflac "$a" --show-tag=ARTIST | sed s/.*=//g`
ALBUM=`metaflac "$a" --show-tag=ALBUM | sed s/.*=//g`
TITLE=`metaflac "$a" --show-tag=TITLE | sed s/.*=//g`
GENRE=`metaflac "$a" --show-tag=GENRE | sed s/.*=//g`
TRACKNUMBER=`metaflac "$a" --show-tag=TRACKNUMBER | sed s/.*=//g`
YEAR=`metaflac "$a" --show-tag=DATE | sed s/.*=//g`
flac -c -d "$a" | lame -m j -q 0 --vbr-new -V 0 -s 44.1 - "$OUTLAME"
id3tool --set-title="$TITLE" --set-track="${TRACKNUMBER:-0}" --set-artist="$ARTIST" --set-album="$ALBUM" --set-year="$YEAR" --set-genre="${GENRE:-12}" "$OUTLAME"
done |
#!/bin/bash
for a in *.flac
do
OUTLAME=`echo "$a" | sed s/\.flac$/.mp3/g`
ARTIST=`metaflac "$a" --show-tag=ARTIST | sed s/.*=//g`
ALBUM=`metaflac "$a" --show-tag=ALBUM | sed s/.*=//g`
TITLE=`metaflac "$a" --show-tag=TITLE | sed s/.*=//g`
GENRE=`metaflac "$a" --show-tag=GENRE | sed s/.*=//g`
TRACKNUMBER=`metaflac "$a" --show-tag=TRACKNUMBER | sed s/.*=//g`
YEAR=`metaflac "$a" --show-tag=DATE | sed s/.*=//g`
flac -c -d "$a" | lame -m j -q 0 --vbr-new -V 0 -s 44.1 - "$OUTLAME"
id3tool --set-title="$TITLE" --set-track="${TRACKNUMBER:-0}" --set-artist="$ARTIST" --set-album="$ALBUM" --set-year="$YEAR" --set-genre="${GENRE:-12}" "$OUTLAME"
done
Edit: Apparently this has been done before…
http://pastebin.com/f641a9b21