• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Autom. aus ein Ordner in ein anderen "passenden" s

Hi Leute, ich glaube das hier ist nicht ganz das richtige Forum, aber leider wusste ich sonst nicht wohin und dachte mir hier bin ich nah dran.

Nun zu meiner Frage, ich habe einen Ordner Musik. In diesem Ordner sind Ordner von 0-9 und A bis Z. Nun kopier ihc meine Musikdateien immer in den Ordner Musik und verteile diese dann von Hand und per verschieben mit der Maus in den passenden Ordner, also:

Nene - nur geträumt.mp3 --> "N" usw.

Kann man das nicht irgendwie automatisieren? sprich alle mit dem Anfangsbuchstaben N nach N? und die anderen in den passenden Ordner?

Gruß Bigdadyx
 
hi!

dieses skript sollte dir weiterhelfen.

Es verschiebt alle mp3-dateien die mit "a" beginnen aus dem Verzeichnis
/daten/musik/neu/
in das Verzeichnis
/daten/musik/a/


for datei in `find /daten/musik/neu/ -name 'a*.mp3'`
do
mv $datei /daten/musik/a/
done


Es ist sicherlich noch ausbaufähig, z.B. dass Groß- und Kleinschreibung ignoriert wird. Und natürlich sollte es automatisch alle Dateien mit a[A]*.mp3 bis z[Z]*.mp3 durchgehen.

Viel Spaß damit.
 
super sache, vielen dank schonmal für den anfang, das reicht mir erstmal.

sag mal wie muss ich das abspeichern?
also welche endung oder wie?
 
speicher es mit *.sh ab und du musst das skript dann noch ausführbar machen.

und in der ersten zeile im skript muss

#!/bin/sh

stehen.

gruß death
 
Code:
#!/bin/sh
for datei in `find /root/Desktop/Stuff/Musik/NEUE MUSIK/ -name 'a*.mp3'`
do
mv $datei /root/Desktop/Stuff/Musik/A/
done

hmm, so ist nun der code.

in dem ordner neue musik ist eine datei, die ein kleines a am anfang hat, und wenn ich draufklicke passiert gra nichts, ist doch egal wo die shell leigt, oder?
 
Das Problem liegt glaube ich im Pfad.

Das Skript findet den Ordner "Neue Musik" nicht wegen dem Leerzeichen dazwischen.

Ändere in dem Skript den Namen des Ordners wie folgt ab:


/root/Desktop/Stuff/Musik/NEUE\ MUSIK/

und dann führe das Skript mal über die Konsole aus, dann siehst du meißtens warum das Skript nicht funktioniert bzw. wo der Fehler liegt:

sh /pfad/zum/skript.sh

#################

Was mir grad noch auffällt:

Die Ordner befinden sich im home-verzeichnis von ROOT. Eigentlich solltest du als normaler Benutzer keine Zugriff darauf haben. Ich hoffe du meldest dich nicht standardmäßig als root an!
 
irgendwie zerlegt er den namen...
Code:
 cannot stat `/root/Desktop/Stuff/Musik/NEUE/A-Ha': No such file or directory
mv: cannot stat `-': No such file or directory
mv: cannot stat `Celice.mp3': No such file or directory

man müsste das so ändern, dass er bei dem dateinamen die leerzeichen ignoriert...
 
Setz die Variable mal in Anführungszeichen:
Code:
mv "$datei" ...

Btw.: Man meldet sich NIEMALS graphisch als 'root' an.
Man legt sich einen entsprechenden User für die tägliche Arbeit an.
Und wenn man root-Rechte benötigt, dann mit
Code:
su -
in der Konsole, oder mit
Code:
kdesu <Programm>
z.B. in KDE.

Es ist nicht erforderlich ständig als Admin im System/Internet unterwegs zu sein, sondern nur ein Sicherheitsrisiko!!!!Einseinself

[edit]
Diese Nachfragerei solltest du in Zukunft bitte unterlassen.
Das ist hier keine persönliche Support-Hotline.
[/edit]
 
Hallo,

hab versehentlich den letzten Eintrag, bzw. die zweite Threadseite nicht gelesen :? und das mal in Python gebaut (letztlich doch shell (os.system)).

Anleitung: Pack dieses Python-Skript als "cpscript.py" in Dein Verzeichnis "NEUE MUSIK", mache es mit "chmod +x cpscript.py" ausführbar und führe es mit "./cpscript.py" aus.
Warnung: Es legt die entsprechenden Pfade direkt über "NEUE MUSIK" an, sofern diese nicht schon dort existieren.

Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

scriptpath=os.getcwd()

filelist=os.listdir(scriptpath)

for i in range(len(filelist)):
  currentfile=filelist[i]
  if currentfile[-3:]  !=  "mp3":
    continue
  newpath=scriptpath.replace("NEUE MUSIK", currentfile[0])
  if not os.access(newpath, 0):
    os.mkdir(newpath)
  filefullpath=scriptpath+"/"+currentfile
  filefullpath=filefullpath.replace(" ","\\ ")
  shelline="cp "+filefullpath+" "+newpath
  os.system(shelline)

Ach so: Die Einrückungen des Codes sind (wie immer in Python) von Bedeutung und müssen so in den Text-Editor übernommen werden, sonst läuft es nicht.

Beste Grüße

PS.: Bzgl. Einloggen als root stimme ich den "Vorrednern" zu, allein da sonst Virengefahr. Vielleich hilft Dir meine Seite http://www.angelfire.com/linux/tux25/
Das mit dem Nachfragen finde ich nicht soo schlimm, solange es sich in Grenzen hält ...

Edit: Code noch etwas aufgeräumt; kopiert jetzt nur noch Dateien mit Endung "mp3".
 
Und nochmals etwas größer und komfortabler (muß wiederum ins Verzeichnis "NEUE MUSIK").
Löscht leere Verzeichnisse über "NEUE MUSIK" und zeigt an, was es so macht.

Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

def cleandirs(path,a,b):
  cll=[]
  for i in range(a, b+1):
    cleanpath=path+"/"+chr(i)
    if os.access(cleanpath,0):
      if os.listdir(cleanpath) == []:
        os.rmdir(cleanpath)
        cll.append(cleanpath)
  return(cll)

scriptpath=os.getcwd()

filelist=os.listdir(scriptpath)

counter=0
createdlist=[]
print

for i in range(len(filelist)):
  currentfile=filelist[i]
  if currentfile[-3:]  !=  "mp3":
    continue
  newpath=scriptpath.replace("NEUE MUSIK", currentfile[0])
  if not os.access(newpath, 0):
    os.mkdir(newpath)
    createdlist.append(newpath)
  filefullpath=scriptpath+"/"+currentfile
  filefullpath=filefullpath.replace(" ","\\ ")
  shelline="cp "+filefullpath+" "+newpath
  print "Copying "+currentfile+"."
  os.system(shelline)
  counter += 1

parentpath=scriptpath.replace("/NEUE MUSIK", "")

cleanlist=[]

c=cleandirs(parentpath,48,57)
if c != []:
  for i in c:
    cleanlist.append(i)

c=cleandirs(parentpath,65,90)
if c != []:
  for i in c:
    cleanlist.append(i)

c=cleandirs(parentpath,97,122)
if c != []:
  for i in c:
    cleanlist.append(i)

if counter != 0:
  print "\n"+str(counter)+" mp3-files copied.\n"

if createdlist != []:
  print "The following directories have been created:\n"
  for i in createdlist:
    print i
  print

if cleanlist != []:
  print "The following empty directories have been deleted:\n"
  for i in cleanlist:
    print i

Viele Grüße
 
Oben