ZSH und While-Schleife

  • Themenstarter Themenstarter Fluffy
  • Beginndatum Beginndatum
F

Fluffy

Guest
Hallo,

Ich hab hier ein ganz komisches Problem.
(Normalerweise sind meine Probleme kleiner und ich brauche nur 1Zeiler)
find findet keine in der Shell definierten Methoden(auch nicht nach einem export).
Hab eine definiert und find hat sich in -exec darüber beschwert das die Methode nicht vorhanden sei.
und bei einer while-schleife findet der Interpreter die Befehle nicht z.B. mv oder grep.

Ich will meine Musiksammlung aufräumen und die MP3s mit ID3-Tag von dennen ohne trennen.
Diese sind in einer Verzeichnisstruktur abgelegt, welche ich durch ID3-verwaltung abschaffen will.

Hier ist die While-Schleife, die definierte Funktion machte im Grunde genau das gleiche, abgesehen von den Versuchen die Zeilenendung in der Shell besser hinzubekommen den ein einfaches for i in *.mp3 kann ich aufgrund der verzeichnisstruktur nicht machen.

PHP:
k=$(find . -name \*.mp3 -print0|sed s/"\.\/"/"\n\.\/"/g)
while (ls); do # ich weiss ls, aber ist zum rumspielen und ich werde davor sitzen also kann ich notfalls auch ein Ctrl-C ausführen
path="$(echo $k|grep -e "^$" -v|head -n $i|tail -n 1)"
mp3info $path 2>&1|grep -e "does not have"
if [[ $? != 0 ]];then
mv $path /home/fluffy/test
fi
i=$[$i+1]
done

Gruß

Fluffy

Edit:
Es scheint ein problem damit zu geben das head für den n-parameter keine Variablen mag.
 
Zuletzt bearbeitet von einem Moderator:
Die $path-Variable erklärt wiso auf einmal Befehle nicht mehr gefunden wurden.
Vielen Dank.
Funktioniert nun.

Hier mal die funktionierende Schleife.

PHP:
k=$(find . -name \*.mp3 -print0|sed s/"\.\/"/"\n\.\/"/g)

i=2 # first line is empty so we skip it
u=0
v=$u

while ( [[ $u == $v ]]); do 
  u="$(echo $k|head -n $i|tail -n 1)"

  if [[ $u != $v ]];then  
    v=$u  
    mp3info $u 2>&1|grep -e "does not have"  
    
    if [[ $? != 0 ]];then    
      echo $u;    
      mv $u /home/fluffy/music
    fi  
    i=$[$i+1]
  fi
done
 
Zurück
Oben