Pagina 1 van 1

Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 12:15
door dirkjanl
Plaats het ook maar weer onder Audio omdat het geluidsbestanden betreft.
In mijn muziekverzameling staan vele mappen met geripte cd's in .wav formaat en waarbij de spaties niet zijn vervangen door niets of door een underscore.

Als ik die mappen nu wil converteren naar .flac bestanden moeten die spaties in die namen er tussen uit, anders werkt de flac opdracht in de terminal niet.
Via 'Bestandenhernoemer' is het me niet gelukt om in de gehele naam alle spaties te verwijderen.
Voorbeeld naam: 01 The Balled Of Bill Hubbard.wav

Wel door alles na de eerste twee tekens alles van die naam te verwijderen, maar dan houd ik alleen volgnummers over. Ik kijk of het anders kan.
Weet iemand hoe ik met een terminal opdracht de spaties in alle - 14 - namen die in één map staan kan verwijderen of vervangen door een underscore?

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 13:07
door MenthaSuaveolens
Je kan in Bulkrenamer aka bestanderhernoemer eenvoudig de spaties vervangen of weglaten. Hiertoe kies je de modus vervangen en vervolgens de optie "Reguliere uitdrukking".

Geef dan \ (dit is een \ gevolgd door een spatie) op en kies bv. een leeg vervangen veld. Alle spaties verdwijnen dan uit de namen

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 14:02
door dirkjanl
Fantastish, MenthaSuaveolens, dat werkt prima!
Wat ik gedaan heb met de Bestandenhernoemer: de bestanden in een map geselecteerd, > Kies voor 'Vervangen' 'Alleen naam' > 'Reguliere uitdrukking' aangevinkt. In het veld 'Zoeken' de "\ " (dit is een \ gevolgd door een spatie) ingetypt en de namen wijzigden zich in de voorbeeld kolom 'Nieuwe Naam': geen spaties meer. En klik op 'Hernoemen'.

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 15:49
door dirkjanl
En dan een stapje verder, kan dit ook via de terminal?
We hebben deze FFMPEG opdracht die de .wav converteert naar .flac.

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/')"; done
En we hebben uit de post over cd ripper 'abcde' de wat ik maar deelopdracht noem

Code: Selecteer alles

-e 's/ /_/g'
waarmee de spaties vervangen worden door een underscore.

Is het mogelijk om die twee samen te voegen in één opdrachtregel? Zodat bijvoorbeeld na het converteren van .wav naar .flac de spaties worden vervangen door een underscore?
Ik heb een paar pogingen gedaan om dat uit te proberen maar ik kreeg steeds een foutmelding.

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/' -e 's/ /_/g')"; done

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed -e 's/ /_/g' 's/wav$/flac/')"; done

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/' | -e 's/ /_/g')"; done

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed -e 's/ /_/g' | 's/wav$/flac/')"; done
Let wel, ik heb hier nooit in geoefend en het enige waar ik naar kijk is patronen in een opdrachtregel en probeer aan de hand daarvan te kijken hoe ik iets kan wijzigen. Nog zonder resultaat vandaag ;-)

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 20:57
door MenthaSuaveolens
Inderdaad, die commando's kunnen niet werken. Minder gekend is dat het for-commando niet goed werkt als je bestandsnamen met spaties hebt. Maak bv. eens een bestandsmap met enkele bestanden in waarvan er enkelen een spatie bevatten. Voer dan bv. het volgende commando uit (het zou enkel een lijst van de bestandsnamen mogen opleveren).

Code: Selecteer alles

for filename in $(ls); do echo "$filename";done
Om het for-commando met bestandsnamen te doen werken die spaties bevatten, zal je de omgevingsvariable IFS moeten aanpassen.

Code: Selecteer alles

IFS=$(echo -en "\n\b") #pas IFS aan
for filename in $(ls); do echo "$filename";done #nu werkt de for-loop goed !
We hernoemen alle bestanden met een spatie er in naar een bestandsnaam met een underscore in plaats van de spatie (we gebruiken tr of translate)

Code: Selecteer alles

for filename in $(ls); do mv -T "$filename" "$(echo $filename | tr -s [:blank:] [_])";done

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Zo 21 Aug 2022, 21:51
door dirkjanl
Dank weer, hier moet ik eens goed naar kijken. Op dit moment duizelt het me ;-)

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Ma 22 Aug 2022, 12:26
door dirkjanl
Oké
Uitgeprobeerd en gezien wat het doet. Wat ik denk dat voor mij nu het meest praktische is is de laatste:

Code: Selecteer alles

for filename in $(ls); do mv -T "$filename" "$(echo $filename | tr -s [:blank:] [_])";done
En kan die dan samen met onderstaande (.wav converteren naar .flac) in een 'opdracht'.

Code: Selecteer alles

for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/')"; done
Dan gaat het als volgt:

Code: Selecteer alles

for filename in $(ls); do mv -T "$filename" "$(echo $filename | tr -s [:blank:] [_])";done
for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/')"; done
En dat werkt! Bedankt u allen!

Edit een poosje later: Bij een tweede poging ging het toch niet: twee opdrachten in een keer geven lukte niet. Wat ik er zo snel uit begrijp is dat het commando ieder los woord als een bestand ziet.

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Ma 22 Aug 2022, 12:52
door dirkjanl
Afbeelding
Afbeelding

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Ma 22 Aug 2022, 14:10
door MenthaSuaveolens
Ja, maar heb je IFS wel gezet vooraleer je die acties hebt uitgevoerd? Het is daarom beter een shell-script te maken, als je die acties veelvuldig wilt gaan gebruiken.

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Ma 22 Aug 2022, 14:31
door dirkjanl
Ah, ik heb een middagdutje gedaan en zie:
Eerst doen:

Code: Selecteer alles

IFS=$(echo -en "\n\b") #pas IFS aan
for filename in $(ls); do echo "$filename";done #nu werkt de for-loop goed !
for filename in $(ls); do mv -T "$filename" "$(echo $filename | tr -s [:blank:] [_])";done
for filename in $(ls *.wav); do ffmpeg -i "$filename" "$(echo $filename | sed 's/wav$/flac/')"; done
Wel krijg ik de boodschappe:
>>[swscaler @ 0x562e28a046c0] deprecated pixel format used, make sure you did set range correctly
>>[flac @ 0x562e2899eb80] Frame rate very high for a muxer not efficiently supporting it.
>>Please consider specifying a lower framerate, a different muxer or -vsync 2
Framerate staat op 90k fps, maar de geluidsbestanden gaan verder prima!
.
Edit: @MenthaSuaveolens, ik zag jouw reactie pas toen ik de mijne al had geschreven.

Re: Bulk actie spaties in naam verwijderen

Geplaatst: Ma 22 Aug 2022, 14:34
door dirkjanl
Ja, maar heb je IFS wel gezet vooraleer je die acties hebt uitgevoerd? Het is daarom beter een shell-script te maken, als je die acties veelvuldig wilt gaan gebruiken.
Tja, een shell-script maken, dat heb ik dus nog nooit gedaan. Dan moet ik daar eerst eens een lesje in volgen.