Anzeige:
Ergebnis 1 bis 5 von 5

Thema: "find" Ausgabe beschneiden

  1. #1
    Registrierter Benutzer
    Registriert seit
    30.01.2010
    Beiträge
    21

    "find" Ausgabe beschneiden

    Hallo,

    habe mit "find" folgende Ausgabe:

    /home/sicherung/manual/
    /home/sicherung/manual/01.01.11
    /home/sicherung/manual/01.01.11_workspace_DEV1
    /home/sicherung/manual/01.01.11_workspace_DEV2
    /home/sicherung/manual/01.01.11_workspace_DEV3
    /home/sicherung/manual/01.01.11_workspace_DEV4

    /home/sicherung/manual/02.01.11_workspace_DEV1
    /home/sicherung/manual/02.01.11_workspace_DEV2
    /home/sicherung/manual/02.01.11_workspace_DEV3
    /home/sicherung/manual/02.01.11_workspace_DEV4

    Nun möchte ich nur alle Ordner innerhalb von 01.01.11 in ein Verzeichnis verschieben. Dachte eigentlich an folgende Zeile... was nicht funktioniert da er dann - natürlich - den ganzen Ordner "manual" in "/home/sicherung/auto/." verschiebt.

    Code:
    find /home/sicherung/manual/ -maxdepth 2 -type d -exec mv {} /home/sicherung/auto/. \;
    Brauche dieses "auslassen" der überflüssigen Verzeichnisse wie,

    /home/sicherung/manual/
    /home/sicherung/manual/01.01.11
    /home/sicherung/manual/02.01.11

    in der Ausgabe von "find" sehr oft ... daher bin ich dankbar über jeden hilfreichen Post.

    Grüße
    Geändert von tetex (27-01-2011 um 11:17 Uhr)

  2. #2
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Mir ist nicht ganz klar, was du zu automatisieren versuchst, darum mal ein paar allgemeine Tipps:
    Du kannst reguläre Ausdrücke zum Einschränken benutzen und die Benutzung von -mindepth 2 empfehle ich dann auch mal ;-)
    Beispiele:
    Code:
    # Findet alles, was sowohl hallo als auch welt enthält (case-insensitive):
    find -iname '*hallo*' -iname '*welt*'
    # Findet alles, was hallo, aber nicht welt enthält:
    find -iname '*hallo*' ! -iname '*welt*'
    # Findet alles, was entweder hallo oder welt enthält:
    find -iname '*hallo*' -o -iname '*welt*'
    # Findet alles, was hallo oder nicht welt enthält:
    find -iname '*hallo*' -o ! -iname '*welt*'
    Suchbedingungen lässt sich mit Klammern ("(" und ")") auch anders verknüpfen.
    Weiterer Tipp: Statt \; besser \+ benutzen, dann wird mv nicht so oft aufgerufen (es werden so viele Parameter wie möglich zusammengefasst; bei einigen Programmen nicht sinnvoll, bei mv aber recht nützlich).

    Um die weiter helfen zu können, müsste man allerdings wissen, weshalb nur der Inhalt von 01.01.11 verschoben werden soll, also wodurch sich dieser Ordner dafür qualifiziert. Wenn nur der Inhalt von 01.01.11 verschoben werden soll, wäre der folgende Befehl am einfachsten:
    Code:
    mv /home/sicherung/manual/01.01.2011/{,.[^.]}* /home/sicherung/auto/.
    Damit werden auch versteckte Dateien und Verzeichnisse in 01.01.2011 verschoben.

    Ansonsten gibst am besten mal eine Anleitung im Stile eines Kochrezeptes.

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.01.2010
    Beiträge
    21
    Zitat Zitat von John W Beitrag anzeigen
    Mir ist nicht ganz klar, was du zu automatisieren versuchst, darum mal ein paar allgemeine Tipps:
    Du kannst reguläre Ausdrücke zum Einschränken benutzen und die Benutzung von -mindepth 2 empfehle ich dann auch mal ;-)
    Beispiele:
    Code:
    # Findet alles, was sowohl hallo als auch welt enthält (case-insensitive):
    find -iname '*hallo*' -iname '*welt*'
    # Findet alles, was hallo, aber nicht welt enthält:
    find -iname '*hallo*' ! -iname '*welt*'
    # Findet alles, was entweder hallo oder welt enthält:
    find -iname '*hallo*' -o -iname '*welt*'
    # Findet alles, was hallo oder nicht welt enthält:
    find -iname '*hallo*' -o ! -iname '*welt*'
    Suchbedingungen lässt sich mit Klammern ("(" und ")") auch anders verknüpfen.
    Weiterer Tipp: Statt \; besser \+ benutzen, dann wird mv nicht so oft aufgerufen (es werden so viele Parameter wie möglich zusammengefasst; bei einigen Programmen nicht sinnvoll, bei mv aber recht nützlich).

    Um die weiter helfen zu können, müsste man allerdings wissen, weshalb nur der Inhalt von 01.01.11 verschoben werden soll, also wodurch sich dieser Ordner dafür qualifiziert. Wenn nur der Inhalt von 01.01.11 verschoben werden soll, wäre der folgende Befehl am einfachsten:
    Code:
    mv /home/sicherung/manual/01.01.2011/{,.[^.]}* /home/sicherung/auto/.
    Damit werden auch versteckte Dateien und Verzeichnisse in 01.01.2011 verschoben.

    Ansonsten gibst am besten mal eine Anleitung im Stile eines Kochrezeptes.
    Sorry ... es sollen auch die Inhalte von 02.01.2011 verschoben werden.

  4. #4
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Code:
    mv /home/sicherung/manual/[0-9][0-9].[0-9].[0-9][0-9][0-9][0-9]/{,.[^.]}* /home/sicherung/auto/.
    Dabei werden soeben verschobene Dateien aber nicht überschrieben (Beispiel: ist in 01.01.2011 etwas enthalten und in 02.01.2011 eine Datei mit gleichem Namen, bleibt die Datei in 02.01.2011 wo sie ist).

  5. #5
    Registrierter Benutzer
    Registriert seit
    30.01.2010
    Beiträge
    21
    Hi,

    danke für eure Antworten.... habe es jetzt doch mit zwei Schleifen gelöst und es geht sogar sehr fix trotz den 37000 Ordnern...

    DIRLIST=`ls -d /home/sicherung/manual/*/`
    for PATHTODIR in ${DIRLIST}; do
    MOVELIST=`ls -d ${PATHTODIR}*/`
    for PATHTOMOVE in ${MOVELIST}; do
    mv ${PATHTOMOVE} ${ABSOLUTESAVEPATH}/.
    done
    done

    Überschrieben wird hierbei nicht. Das ist auch so gewollt.

    Gruß

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •