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 Folder
und ganz loswerden Subfolder
( Subfolder
wird 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!
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:
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:
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>
'/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
' {} ';'
Jusi
Jusi
MK
Jusi
Jusi
MK
Jusi
rm -rf
to ersetzttrash
, 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 demfind
Befehl 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?MK
find
sucht der Befehl nach Verzeichnissen direkt unter dem übergeordneten Ordner - das ist hier $0. In jedem dieser Verzeichnissemv
geht der Befehl drei Ebenen tiefer (jedes * ist eine Ebene tiefer) und verschiebt die Datei nach oben.MK
Jusi
MK