Argument list too long probleem

Pagina: 1
Acties:

  • VROEM!
  • Registratie: Februari 2000
  • Laatst online: 18-05-2025

VROEM!

broembroem!

Topicstarter
Ik heb ene poos geleden een werkend mp3 normaliseer script gehad, dat verdacht veel leek op dit beestje hieronder. Ik heb ongeveer 10.000 nummers, verdeeld over een aantal subdirs en die wil ik normalizen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#Martijn's mp3 sorteer script
# 'find -print0' print alle bestanden gescheiden door een null character.
# 'xargs -0' verwacht alle argumenten gescheiden door een null character.

GECAT=/mnt/allexports/mp3/Sortaktie


cd $GECAT

find $GECAT -type f -name "*.mp3" -print0 | xargs -0 sh -c '
    
    while [ -n "$1" ]; # zolang $1 de naam van een mp3 bevat.
        do
    echo Normalizing "$1"
    mp3gain -r -k "$1"
    # schuif alle variabelen een plaats op, $2 wordt $1 etc.
        shift
    done
' dummyarg


Als ik dit script uitvoer krijg ik de volgende error:
code:
1
./mp3normalize.sh: line 11: /usr/bin/find: Argument list too long

Ik heb via via al gevonden dat het mogelijk een probleem is van bash en niet van find, maar veel verder kom ik niet. Ik heb al geexperimenteerd met de quotes aan/uit te zetten rond *.mp3 en ik heb ook enkele quotes ipv dubbele gebruikt, alles zonder resultaat.

Waar kan dit nog aan liggen?

ieeeepppppp :P


Verwijderd

Argument list too long. Ik denk dat het aantal bestanden wat het script aanroept te groot is voor de shell. Probeer het eens op een directory met een kleiner aantal MP3-tjes.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 04:54

Gerco

Professional Newbie

Je probeert het volgende command uit te voeren:
code:
1
sh -c '<normaliseercode>' 1.mp3 2.mpg 3.mp3 ... 10000.mp3

Die lijst is veel te lang voor de shell. Misschien is het handiger om een andere constructie te gebruiken, zoiets bijvoorbeeld:
code:
1
find <mp3dir> -type f -name "*.mp3" -exec mp3gain -r -k \"{}\" \;

xargs maakt van een lijst, 1 string, als je find het exec'en laat doen, gebeurt alles gewoon netjes per bestand en hoef je niet meer moeilijk te doen met $1, $2 e.d. Als bonus maakt het ook nogeens niet uit hoe lang je lijst bestanden is. Zet eens echo voor mp3gain als je niet begrijpt wat dit precies doet.

Uiteraard kan ik je aanraden om 'man find' eens goed te lezen, find kan een stuk meer dan de meeste mensen denken

[ Voor 69% gewijzigd door Gerco op 17-08-2005 11:28 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!