Portál AbcLinuxu, 30. dubna 2025 18:45
Měl jsem na disku v neotagovaných mp3 (pojmenovaných pouze jménem stopy) několik alb, která jsem chtěl dát do pořádku. Bohužel jsem nenarazil na tagger, který by to zvládl celé sám, a tak jsem tomu musel trochu pomoci
Za velkého úsilí jsem napsal krátký skript, který vytáhne z .m3u playlistu názvy souborů a těm předřadí číslo stopy. Tady je:
#!/bin/sh # Script adding track numbers from m3u playlists to # beginning of file names # Exit if no playlist given if [ -z "$1" ] then echo "Usage: $0 playlist.m3u" exit 1 fi # if we aren't in working directory, cd there echo $1| grep '/' >/dev/null && \ cd "${1%/*}" LIST="${1##*/}" # first line is number one N=1 # get each file name, change \ to /, mv it grep -v '^#' "${LIST}" | sed -e 's/\\/\//' |while read FILE do #Remove trailing \r (needed for lists created in DOS) FILE=$(echo $FILE |sed -e 's/\r//' ) # If aren't files in same directory, # split path to "dir" and "file" parts if echo $FILE | grep -v '/' >/dev/null then file=${FILE} dir="" else dir="${FILE%/*}/" file="${FILE##*/}" fi # pad 1-9 with 0 (for proper sorting) [ $N -lt 10 ] && n=0$N || n=$N # Do the job mv "${dir}${file}" "${dir}${n}-${file}" N=$(($N+1)) done
Skript si tak, jak je teď, poradí s \ v cestách, mezerami v názvech souborů a adresářů i DOSovými konci řádků. Pokud mi někdo poradí, jak šikovně nahradit ty sedy a grepy čistým bashem, budu rád.
Po přidání čísla stopy do jména souboru už je jednoduché naskenovat pořadí a provést s tagy (nebo jmény) všemožné kejkle.
Tiskni
Sdílej:
[ $N -lt 10 ]dej
(($N<10))
bash(1)
a v něm CONDITIONAL EXPRESSIONS
. $ which [ test /usr/bin/[ /usr/bin/test
lubos@ares ~ $ type [ [ is a shell builtin lubos@ares ~ $ type test test is a shell builtin
/usr/bin
#EXTM3U #EXTINF:232,Howard Shore - Foundations Of Stone Howard Shore - Foundations Of Stone.mp3 # atd.přičemž ty komentáře tam být nemusí. Průšvih je, že z tohoto si to EasyTag nenačte, tak se mu to musí předchroupat...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.