massenverschiebung

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hoernchen, 15.02.2006.

  1. #1 hoernchen, 15.02.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    hallo,

    wuerde das folgende skript so funktionieren ?

    for i in $(find / -iname "*.ogg"); do mv $i /mnt/musik/; done

    sprich es soll alle ogg-dateien die gefunden werden in ein bestimmtes verzeichnis schupfen.
    hab im moment leider keine testmoeglichkeit (außer ich mißbrauchte den sql-server neben mir und das will ich nicht unbedingt).
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 ninguno, 15.02.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    ich würd's so machen, sonst kann es probleme geben mit filenamen die leerzeichen enthalten
    Code:
    find / -iname "*.ogg" | while read file; do mv "$file" /mnt/musik/; done
     
  4. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Du kannst auch find direkt die mv-Anweisung geben:
    Code:
    find / -iname "*.ogg" -exec mv {} /mnt/musik/ \;
    
    Klappte bei einem schnellen Test auch mit Dateien mit Leerzeichen.
     
  5. #4 hoernchen, 15.02.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    erstmal danke, ich probiers dann daheim.

    @rikola : so hatte ich das schonmal, und da gings aber nicht, sprich es tat sich nichts !
     
  6. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wie tat sich nix? Rikolas Beispiel ist syntaktisch richtig. Was gibt

    Code:
    find / -iname "*.ogg" -exec echo mv {} /mnt/musik/ \;
    
    aus?
     
  7. #6 ninguno, 15.02.2006
    ninguno

    ninguno Tripel-As

    Dabei seit:
    13.05.2005
    Beiträge:
    162
    Zustimmungen:
    0
    bei rikola's command besteht nur die gefahr dass find auch die ogg dateien findet die es eben selbst nach /mnt/musik/ verschoben hat. kein beinbruch, aber auch nicht schön
     
  8. #7 Xanti, 15.02.2006
    Zuletzt bearbeitet: 15.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Dann muss man '/mnt/musik' bei find ausschliessen:

    Code:
    find / -path "/mnt/musik" -prune -o -iname "*.ogg" -exec echo mv {} /mnt/musik/ \;
    
    Gruss Phorus

    edit:Hast Recht Ninguno. Hab anfänglich nicht gesehen, dass von / aus gesucht wird, dann gibts natürlich Seiteneffekte, wenn man /mnt/musik nicht ausschliesst.
     
  9. #8 Wolfgang, 15.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Da kann man aber nur hoffen, dass die Anzahl der Dateien nicht zu groß wird.
    Pro Datei ein Prozeß!
    Sonst muss entweder eine Schleife her, oder xargs. ;)

    Gruß Wolfgang
     
  10. #9 Schlaubi_fi.de, 16.02.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    halte ich in dem Zusammenhang auch für schlauer...
     
  11. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    man find:
    Code:
    ...
     -exec utility [argument ...] ;
                 True if the program named utility returns a zero value as its
                 exit status...
    
    man mv:
    Code:
    EXIT STATUS
         The mv utility exits 0 on success, and >0 if an error occurs.
    
    Also find wartet bei der Weitersuche, bis der exec-Befehl erfolgreich ausgeführt wurde. Als Beispiel (in zwei verschiedenen Shells):

    shell1:
    Code:
    ps ax | grep mv | grep -v find | grep -v grep | wc -l      #liefert 0
    
    shell2:
    Code:
    find multimedia/ -iname "*.mp3" -exec mv {} test \;
    
    shell1 (während längerem Lauf von find):
    Code:
    ps ax | grep mv | grep -v find | grep -v grep | wc -l      #liefert 1
    
    Gruss, Phorus
     
  12. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Es gibt noch xargs ;)
     
  13. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    @ wolfgang:

    Ich dachte, Du meinst find startet haufenweise parallele Prozesse (was es ja wohl nicht macht). Kannst Du mir bitte den Unterschied zwischen "find -exec.." und "find .. | xargs -n1..." erklären? :)
     
  14. #13 Wolfgang, 17.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ganz kurz:
    der -exec bekommt die gesamten Argumente von find komplett übergeben.
    Der -exec Befehl startet nun für diese Liste (je mach Befehl) pro Argument oder für alle zusammen einen Prozeß.

    Wenn die Liste nun sehr lang ist, bekommst du unter Umständen die Fehlermeldung:
    Argumentlist too long...
    Mit xargs kannst du die Anzahl der übergebenen Argumente festlegen.
    Option -n[NUM].
    Besonders in Verbindung mit möglichen unmöglichen Dateinamen, wie sie in einem (hier nicht erwähnten ) OS sehr beliebt sind, macht sich die Kombination aus
    find /path -name "*foo" -print0|xargs -0 -n1 rm
    sehr gut.
    Hier wird als Trennzeichen \0 verwendet, was alle Dateinamen mit sämtlichen Bad-Char als jeweils ein (siehe -n1) Argument übergibt.
    Der zweite Vorteil ist, dass die Argumentliste nicht zu lang wird.

    Gruß Wolfgang
    PS Ja, hatte mich etwas unglücklich ausgedrückt.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Danke, jetzt hab ichs verstanden. ;)

    Gruss, Phorus
     
  17. #15 hoernchen, 22.02.2006
    hoernchen

    hoernchen UBERgarstiges nagetier

    Dabei seit:
    17.02.2005
    Beiträge:
    1.081
    Zustimmungen:
    0
    soda, habs endlich ausprobiert. rikolas loesung hat funktioniert. mein fehler damals war daas fehlende "\" am schluß.
    es gab immer nur einen prozeß pro verschieben auf einmal, also keine anhaeufung.

    auf jeden fall ganz viel danke an alle !
     
Thema:

massenverschiebung