
Ich habe jede Menge Dateien an Orten wie diesem:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext
.../(filename2)/(filename2).ext
.../(filename3)/(filename3).ext
Ich versuche, die .ext
Dateien stapelweise in den übergeordneten Ordner zu verschieben, sodass es folgendermaßen aussieht:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext
Dadurch wird der Unterordner im Wesentlichen überflüssig, ähnlich wie beim Herausnehmen von Trennblättern aus einem Schulordner.
Antwort1
Möglicherweise müssen Sie dies mitcygwin, was ich jedem empfehlen würde, der (immer noch??) die M$ Windoze-Spyware verwendet.
So etwas sollte funktionieren. Führen Sie es im Verzeichnis aus C:/Users/(Username)/Desktop/(Parent-Collection name)/
(das in Cygwin wie folgt bezeichnet würde /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/)
:
for i in `find . -name "*" -type f`;
do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`;
done
(Parent-Collection name)
Dadurch werden alle Dateien in allen Verzeichnissen darunter nach verschoben (Parent-Collection name)
. Genauer gesagt handelt es sich dabei um eine do
Schleife, bei der der Index i
alle Dateien vom aktuellen Verzeichnis abwärts durchläuft. Das ist es, was der find
Befehl auflistet. Sie können die Syntax nachschlagen, indem Sie ausführen man find
. Anschließend führen Sie aus, um mv
diese Datei ( $i
) an den neuen Speicherort zu verschieben (). Dieser neue Speicherort wird durch den ursprünglichen Dateinamen () angegeben, der echo $i
durch den Stream-Editor ( sed
, den Sie mit nachschlagen können man sed
) ausgeführt wird, der so eingestellt ist, dass der Pfad entfernt wird und der Basisdateiname übrig bleibt.
Ich schlage vor, es zu testen (erstellen Sie ein Verzeichnis mit einigen Unterverzeichnissen, die leere Textdateien oder etwas Ähnliches enthalten) und stellen Sie sicher, dass Sie ein Backup haben!
Anschließend möchten Sie möglicherweise alle (jetzt leeren) Verzeichnisse unterhalb Ihres aktuellen Verzeichnisses entfernen:
for i in `find . -name "*" -type d`;
do rmdir $i;
done
Der einzige Unterschied besteht darin, dass Sie angeben, nach Verzeichnissen ( ) statt nach Dateien ( ) find
zu suchen und diese Verzeichnisse dann zu entfernen ( , was nur bei leeren Verzeichnissen funktioniert).-type d
-type f
rmdir
Ist Linux nicht cool? Cygwin bietet Ihnen einige der Leistungsmerkmale von Linux und könnte ein erster Schritt sein, um Sie so vertraut damit zu machen, dass Sie eines Tages vielleicht sogar den Mut finden, auf etwas wie Ubuntu umzusteigen. :)
Antwort2
Dies kann mit Powershell durchgeführt werden, obwohl wir nicht wissen, welche Windows-Version Sie verwenden.
$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"
$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
{
$destinationfolder = Split-Path -Parent $file.Directory.FullName
Move-Item $file.FullName $destinationfolder
}
Alle Dateien in den Unterverzeichnissen $sourcefolder
werden in den ParrentCollectionName
Ordner verschoben. Anschließend können Sie die leeren Unterordner löschen.