Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Hoe in BASH input namen omzetten naar output naam met een toevoeging?  (gelezen 1569 keer)

Offline bart85

  • Lid
Bij het converteren van FLAC naar MP3 wil ik bestandsnamen omzetten voor output file. Input is "/Music/map_artiest/song.flac". In bash wil ik die omzetten voor output file:  "/Music/map_artiest_mp3/song.mp3"
De rest van de code is al compleet:
for a in "`find ./ -name "*flac"`"; do
OUTF=?
flac -c -d "$a" | lame -V0 - "$OUTF"
done

Op de plaats van de ? moet het output filename komen te staan. Op de manier die hierboven staat: "/Music/map_artiest_mp3"/song.mp3.
Bijv van "/Music/AC_DC/Thunderstruck.flac" naar "/Music/AC_DC_mp3/Thunderstruck.mp3" Dat voor alle albums met liedjes in flac formaat.
« Laatst bewerkt op: 2014/04/09, 12:39:21 door bartveurink »
Relying on complex tools to manage and build your system is going to hurt the end-users. [...] "If you try to hide the complexity of the system, you'll end up with a more complex system". Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

— Aaron Griffin

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #1 Gepost op: 2014/04/09, 13:43:07 »
De wiki van Archlinux heeft wel een aantal leuke scripts: https://wiki.archlinux.org/index.php/Convert_Flac_to_Mp3#Without_FFmpeg


Edit: ik zie net dat je ook de directory wil aanpassen. Hiervoor moet je een aantal tussenstappen doen.

Na de for... line kan je dit toevoegen:
dir="$(dirname "$a")_mp3"
base="$(basename "$a")"
base="${base[@]/%flac/mp3}"
OUTF="$dir/$base"

Niet getest, maar zoiets zou moeten werken. Let er wel op dat de nieuwe dir wel moet bestaan voordat je er bestanden in kan zetten. Met een mkdir -p "$dir" voordat je het flac commando uitvoert heb je dat ook weer opgelost.

De 2e en 3e regel zouden overigens ook wel in 1 regel kunnen, maar daar wordt het niet echt overzichtelijker of duidelijker van.
« Laatst bewerkt op: 2014/04/09, 14:11:57 door Johan van Dijk »

Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #2 Gepost op: 2014/04/09, 13:59:54 »
Uit mijn 'handig'-lijstje, ergens ooit eens uit een forum gevist:

flac -> mp3:
$ find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 64k {}.mp3 \;
If you don't like the .flac.mp3 thing, you can rename easily:
rename 's/\.flac//' *.mp3

Offline bart85

  • Lid
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #3 Gepost op: 2014/04/09, 14:55:49 »
De wiki van Archlinux heeft wel een aantal leuke scripts: https://wiki.archlinux.org/index.php/Convert_Flac_to_Mp3#Without_FFmpeg


Edit: ik zie net dat je ook de directory wil aanpassen. Hiervoor moet je een aantal tussenstappen doen.

Na de for... line kan je dit toevoegen:
dir="$(dirname "$a")_mp3"
base="$(basename "$a")"
base="${base[@]/%flac/mp3}"
OUTF="$dir/$base"

Niet getest, maar zoiets zou moeten werken. Let er wel op dat de nieuwe dir wel moet bestaan voordat je er bestanden in kan zetten. Met een mkdir -p "$dir" voordat je het flac commando uitvoert heb je dat ook weer opgelost.

De 2e en 3e regel zouden overigens ook wel in 1 regel kunnen, maar daar wordt het niet echt overzichtelijker of duidelijker van.

In regel 6 krijg ik deze foutmelding:

flac2mp3.sh: 6: flac2mp3.sh: Bad substitution

Dat is deze regel:
base="${base[@]/%flac/mp3}"
Relying on complex tools to manage and build your system is going to hurt the end-users. [...] "If you try to hide the complexity of the system, you'll end up with a more complex system". Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

— Aaron Griffin

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #4 Gepost op: 2014/04/09, 15:14:57 »
Dat werkt hier wel goed, zelfs met een bestand met gekke tekens er in.

Gebruik je wel Bash en niet Dash?
Wat staat er helemaal bovenaan je script en hoe start je hem?

Offline bart85

  • Lid
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #5 Gepost op: 2014/04/09, 15:26:06 »
Bovenaan staat:
#!/bin/bash

Starten met:
sh flac2mp3.sh
Relying on complex tools to manage and build your system is going to hurt the end-users. [...] "If you try to hide the complexity of the system, you'll end up with a more complex system". Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

— Aaron Griffin

Offline bart85

  • Lid
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #6 Gepost op: 2014/04/09, 15:42:40 »
Mij leek eerst de permissies en eigenaren onjuist. Bleek toch niet het geval te zijn. Nog steeds een error.
« Laatst bewerkt op: 2014/04/09, 16:01:36 door bartveurink »
Relying on complex tools to manage and build your system is going to hurt the end-users. [...] "If you try to hide the complexity of the system, you'll end up with a more complex system". Layers of abstraction that serve to hide internals are never a good thing. Instead, the internals should be designed in a way such that they NEED no hiding.

— Aaron Griffin

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #7 Gepost op: 2014/04/09, 16:45:15 »
Je moet je script niet starten met sh, want dat is Dash.
johan@desktop:~$ which sh
/bin/sh
johan@desktop:~$ file /bin/sh
/bin/sh: symbolic link to `dash'

Hoe het wel moet: ./flac2mp3.sh  dus een punt, een slash en daarna de naam.
Nog makkelijker: noem het flac2mp3 en zet het in /home/bart/bin.
Hierna even je terminal afsluiten en opnieuw starten, daarna kan je hem vanuit overal uitvoeren met enkel 'flac2mp3'.

Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #8 Gepost op: 2014/04/09, 20:34:08 »
Bart,

Je kan met de opdracht basename ook de bestand naam hebben zonder de extensie.
Dan wordt het:
base="$(basename "$a" .flac)"
Zie ook man basename.

En je output bestand wordt dan:
OUTF="$dir/$base.mp3"

Dan maak het volgens mij niet uit of je met bash of dash uitvoert via sh.
MvG,
MauRice
Registered Linux user: 473556