Wie per Telnet Dateien verschieben?

  • Eine Frag an die Linux-Experten. Ist auch nicht DM7020-spezifisch. Wie kann ich mittels Telnet eine Liste von Dateien verschieben? Hier mein Ansatz:


    root@dm7020hd:/media/hdd/movie# touch test.txt
    root@dm7020hd:/media/hdd/movie# ls |grep "test"
    test.txt
    root@dm7020hd:/media/hdd/movie# ls |grep "test" |xargs mv '{}' ./Thanakon/
    mv: can't stat 'test.txt/{}': Path has non-directory component
    mv: can't stat 'test.txt/Thanakon': Path has non-directory component


    Die Fehlermeldung sagt mir nix. Geht das irgendwie so? Oder gibt es eine ganz andere Lösung?


    Gruß,
    Steffen

    DM7020 HD v2, 2 x DVB-S, Seagate Video 3.5 HDD 4TB (ST4000VM000), Original DMM Experimental Image 2016-10-19

  • Also im einfachsten Fall gibst Du alle zu verschiebenden. Dateien einzeln an und Ende das Zielverzeichnis.
    Oder Du kannst mit Platzhaltern arbeiten. Spontan fällt mir da nur der Asterisk * ein, der für eine beliebige Anzahl von beliebigen Zeichen steht.
    mv *text* /Pfad/zum/Ziel

    DM8000SSSS, DM820SS, DM900SXFBC

  • Ich wuerde eher zu "find" mit dem Parameter -print0 (das ist ein Null am Ende von print) raten.
    Und die {} kenne ich auch nur ohne die einfachen Hochkommata.
    Also etwa so:
    find . -name "*test*" -print0 | xargs -0 -I {} mv {} ./Thanakon/


    ABER ich glaube nicht, dass das xargs auf der Box ueberhaupt {} beherrscht.
    Geht aber auch nur mit find, dann so:
    find . -name "*test*" -exec mv {} ./Thanakon/ \;


    Aufpassen ist bei Dateien mit Leerzeichen im Namen angebracht. Dann muss man noch Hochkommata um die {} einfuegen lassen.

    DM900 SS, DM8000SSSS
    Kein Support per PN! Nutzt das Forum zum Fragen, dann haben auch andere etwas davon.

  • Warum so kompliziert? Wenn ich die Frage richtig verstanden habe, sollen aus dem movie Ordner nur bestimmte Aufnahmen verschoben werden, da kann man gut mit den Platzhaltern * und ? arbeiten:


    verschiebt alle Dateien, die die Zeichkette Dexter beinhalten nach ./Thakeon
    ls *Dexter*
    mv *Dexter* ./Thanakon


    verschiebt alle Dateien, die den String "Dexter" beinhalten und mit der Extension .ts enden
    ls *Dexter*.ts
    mv *Dexter*.ts ./Thankeon


    verschiebt alle Dateien, die den String "Dexter" beinhalten und mit 2015 beginnen (AufnahmeJahr)
    ls 2015*Dexter*.ts
    mv 2015*Dexter*.ts ./Thankeon


    man kann auch komplexer filern:
    Listet alle " Dexter" Aufnahmen .ts, .ts.meta und .eit
    for ext in .ts .eit .ts.meta;do ls *Dexter*$ext;done


    wenn man mit einer for schleife gefilterte Liste weiterbearbeiten möchte, am besten man die Shell Variable IFS auf "$'\012'" setzen, damit Leerzeichen im Dateinamen nicht als Zeilenumbruch interpretiert werden
    IFS=$'\012'
    for ext in .ts .eit .ts.meta;do mv *Dexter*$ext;done




    man kann das ganze natürlich auch mit find spielen, aber das ist auch Geschmacksache
    find *Dexter* -exec mv {} ./Thankeon +


    find *Dexter*.ts -exec mv {} ./Thankeon +


    find 2015*Dexter*.ts -exec mv {} ./Thankeon +


    IFS=$'\012'
    for ext in .ts .eit .ts.meta;do find *Dexter*$ext -exec mv {} ./Thankeon +;done



    Edit:
    wenn der Suchbegriff Leerzeichen enthält, mit \ oder "" Arbeiten


    ls *Dexter\ -\ ORF*
    oder
    ls *"Dexter - ORF"*

    Gruß Fred

    Die Dreambox ist tot, es lebe die Dreambox

    3 Mal editiert, zuletzt von Fred Bogus Trumper ()

  • Warum so kompliziert? Wenn ich die Frage richtig verstanden habe, sollen aus dem movie Ordner nur bestimmte Aufnahmen verschoben werden, da kann man gut mit den Platzhaltern * und ? arbeiten:


    Verschiebt alle Dateien, die die Zeichkette Dexter beinhalten nach ./Thanakon
    ls *Dexter*
    mv *Dexter* ./Thanakon

    Ja, das hilft mir weiter, das tut genau das was ich benötige. Da habe ich wirklich zu kompliziert gedacht.


    Vielen Dank an alle für die zügigen und tollen Antworten.


    Kann man Groß-/Kleinschreibung irgendwie ignorieren? So dass ein ls *Dexter* auch "dexter" und "deXter" findet?


    --
    Steffen

    DM7020 HD v2, 2 x DVB-S, Seagate Video 3.5 HDD 4TB (ST4000VM000), Original DMM Experimental Image 2016-10-19

  • DAS ist der Nachteil der direkten Verwendung von Wildcards beim ls bzw. mv.
    Die Wildcards werden von der Shell expandiert und da wird ein regulaerer Ausdruck mit wahlweise Gross- und Kleinschreibung etwas unhandlich bei der Formulierung.
    Bei find gibt es den Parameter "-iname" der im Gegensatz zu "-name" Gross- und Kleinschreibung ignoriert.

    DM900 SS, DM8000SSSS
    Kein Support per PN! Nutzt das Forum zum Fragen, dann haben auch andere etwas davon.

  • ls kann kein case sensitiv, da könnte grep weiterhelfen


    ls|grep -i dexter


    verschieben wieder über die for Schleife (mit dem busybox xargs funktioniert das leider nicht - oder ich bin zu ...)


    IFS=$'\012'
    for file in $(ls|grep -i dexter);do mv $file ./Thanakon;done



    alternativ mt find (die "" damit Dateien mit Leezeichen mit ausgegeben/verschoben werden)


    find ./ -iname "*dexter*"


    IFS=$'\012'
    for file in $(find ./ -iname "*dexter*");do mv $file ./Thanakon;done

    Gruß Fred

    Die Dreambox ist tot, es lebe die Dreambox


  • Kann man Groß-/Kleinschreibung irgendwie ignorieren? So dass ein ls *Dexter* auch "dexter" und "deXter" findet?


    Tritt der lexte Fall wirklich auf?


    Simple Lösung für den Rest: mv *exter*