Dateien automatisch in einen übergeordneten Ordner verschieben + Unterordner löschen

Ich versuche herauszufinden, wie ich Dateien automatisch aus einem Ordner in den übergeordneten Ordner verschieben und den ursprünglichen Ordner löschen kann. Zur Veranschaulichung hier meine Struktur:

Parent Folder
    – Subfolder
            – File.avi
            - File2.avi
            - Otherfile.trash

Ich möchte alle meine .avi-Dateien nach verschieben Parent Folderund ganz loswerden Subfolder( Subfolderwird nach dem Verschieben dieser Dateien immer noch nicht leer sein, aber ich möchte sie und ihren übrig gebliebenen Inhalt löschen).

Ich habe mit Hazel herumgespielt, aber ich denke, meine Logik ist nicht die beste und ich kann es nicht herausfinden. Ist es entweder mit Hazel oder Automator oder beiden möglich?

Vielen Dank im Voraus!

Antworten (1)

Die folgende Lösung verschiebt alle (und nur) ".avi"-Dateien in Unterordnern (eine Ebene tief) in den übergeordneten Ordner und löscht die Unterordner. Dies ist möglicherweise nicht die optimale Lösung, da es viele verschiedene Möglichkeiten gibt, wie Shell-Skripte geschrieben werden können, um ein Problem zu lösen.

Annahmen und Einschränkungen:

  1. Nur „.avi“-Dateien werden verschoben. Andere Dateien werden ignoriert und ohne Warnung gelöscht.
  2. Das (aktualisierte) Skript funktioniert nur drei Ebenen unterhalb des übergeordneten Ordners. Wenn sich in den Unterordnern Unterordner befinden, die „.avi“-Dateien enthalten, werden diese wie jede andere Datei (einschließlich dieser „.avi“-Dateien) gelöscht.
  3. Dieses Skript kann ".avi"-Dateien verarbeiten, die Leerzeichen im Dateinamen enthalten.

Achtung: Dies verwendet ein Shell-Skript, das Dateien verschiebt und Verzeichnisse/Dateien vollständig löscht. Erstellen Sie eine Sicherungskopie, bevor Sie versuchen, es zu verwenden (selbst geringfügige Änderungen im Skript können schwerwiegende und nicht behebbare Probleme verursachen). Es gibt keine Möglichkeit, Probleme wiederherzustellen, außer die Wiederherstellung aus einer Sicherung.

Lösung:

  • Richten Sie in Hazel eine Überwachung für den übergeordneten Ordner im Ordnerbereich auf der linken Seite ein.
  • Fügen Sie eine Regel hinzu, indem Sie auf die Schaltfläche "+" klicken, und benennen Sie sie nach Belieben.
  • Legen Sie die Bedingungskriterien wie folgt fest

    If <any> of the following conditions are met for <any of its sub-files or folders>
    
    <Any File>
    
  • Legen Sie Folgendes für die übereinstimmende Datei oder den übereinstimmenden Ordner fest: wie folgt

    <Run shell script> <embedded script>
    
  • Klicken Sie neben dem Dropdown-Menü auf die Schaltfläche Skript bearbeiten .
  • Belassen Sie die Option Shell: auf der Standardeinstellung ( '/bin/sh).
  • Kopieren Sie dieses Shell-Skript in das Textfeld unten und fügen Sie es ein (ich habe Kommentare eingefügt, die mit # beginnen - sie dienen nur dazu, das Verständnis oder die Änderung zu erleichtern).

    # Get the directory name and go into it - this should be the parent directory
    dir=`dirname $1`
    cd $dir
    
    # Find all directories one level below
    # For each subdirectory, move all ".avi" files to its parent directory,
    # then remove the subdirectory and its contents (change avi to any other extension if necessary)
    find . ! -path . -type d -maxdepth 1 -exec sh -c '
    dir="$0"
    mv $dir/*/*/*.avi $dir/..
    rm -rf $dir
    ' {} ';'
    
Das ist fantastisch, vielen Dank! Wäre es einfach, es so zu ändern, dass es 3 Ebenen tief nach .avi-Dateien sucht? Technisch gesehen möchte ich, dass Hazel den Ordner der obersten Ebene überwacht und die Ordner mit .avi-Dateien 3 Ebenen tief sind. Andernfalls müsste ich für jeden Ordner eine Bazilion-Regel erstellen.
Nur zur Verdeutlichung, meine tatsächliche Ordnerstruktur sieht so aus: pastebin.com/HaTmKenk - Ich möchte .avi-Dateien eine Ebene nach oben verschieben und den "Unterordner" mit Resten löschen.
Ja, es ist möglich, Ordner in drei Ebenen zu betrachten, aber jede Lösung müsste definierte Grenzen haben. Ist es auf drei Ebenen tief fixiert? Das ist eine einfache Änderung. Wenn Sie es flexibel brauchen, um in jede Tiefe zu schauen, wäre dieses Skript völlig anders.
Ja, es ist immer 3 Ebenen tief. Hier ist ein Screenshot eines Beispiels aus dem wirklichen Leben: dropbox.com/s/bm53ems7iyqy6g4/… - Ich möchte, dass Hazel den Ordner „TV Shows“ ansieht und Dateien verschieben kann (ja, sie sind eigentlich .mkv, nicht .avi) von den mit Torrent erstellten Ordnern eine Ebene höher bis zu saisonspezifischen Ordnern. In meinem Screenshot muss die ausgewählte Datei eine Ebene höher gehen. Es wird immer das gleiche Niveau sein, glaube ich. Hoffe, es macht Sinn und nochmals vielen Dank für Ihre Hilfe! :)
Können Sie mir helfen, dieses Skript so zu ändern, dass es meinen Anforderungen entspricht (3 Ebenen tief), bitte?
Erledigt. Erstellen Sie ein Backup, bevor Sie es testen und verwenden!
Ich habe es getestet, indem ich eine zufällige Ordnerstruktur mit einer .txt-Datei erstellt habe, die 3 Ebenen tief ist, und Hazel diesen Ordner überwachen ließ. Ich habe auch trash-cli heruntergeladen und Ihr rm -rfto ersetzt trash, um mich "sicherer" zu fühlen. Aus irgendeinem Grund verschob es jedoch .txt-Dateien und löschte Ordner auf meiner gesamten Festplatte, sodass etwas nicht ganz stimmt. Können Sie erklären, was in dem findBefehl passiert? Warum gibt Hazel dir 0 $ statt 1 $? Da es sich nur um einen Ordner handelt, den ich überwachen muss, könnten wir ihn einfach fest codieren, anstatt Variablen zu verwenden?
Hope Hazel beobachtet den übergeordneten Ordner (den obersten Ordner) und nicht die drei Ebenen darunter. Die $1 von Hazel wird verwendet, um einfach in den übergeordneten Ordner zu gelangen. Vom übergeordneten Ordner aus findsucht der Befehl nach Verzeichnissen direkt unter dem übergeordneten Ordner - das ist hier $0. In jedem dieser Verzeichnisse mvgeht der Befehl drei Ebenen tiefer (jedes * ist eine Ebene tiefer) und verschiebt die Datei nach oben.
Dies wird eine sehr lange Diskussion und funktioniert nicht gut für das Format dieser Seite. Wir sollten das zum Chatten oder woanders mitnehmen.
Wenn Sie bereit sind, mir dabei zu helfen, es richtig zu machen, wo kann ich Sie erreichen?
twitter.com - askdifferent0