Kann ich mehrere Dateien in mehreren separaten Unterverzeichnissen / Ordnern gleichzeitig in ein Hauptverzeichnis in Windows verschieben?

0

Ich habe eine 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 .extDateien stapelweise in den übergeordneten Ordner zu verschieben.

C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext

Im Wesentlichen wird der Unterordner überflüssig, ähnlich wie bei der Entnahme von Trennblättern aus einem Schulordner.

zackoftrades333
quelle
1
Bitte beachten Sie, dass Super User kein Skriptschreibdienst ist. Wenn Sie uns mitteilen, was Sie bisher versucht haben (einschließlich aller Skripte, die Sie verwenden) und wo Sie hängen geblieben sind, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch lesen Wie stelle ich eine gute Frage? .
DavidPostill

Antworten:

1

Möglicherweise müssen Sie dies mit cygwin tun , was ich jedem empfehlen würde, der (noch?) Die M $ Windoze-Spyware ausführt.

So etwas sollte funktionieren. Führen Sie es in dem Verzeichnis aus C:/Users/(Username)/Desktop/(Parent-Collection name)/(das in Cygwin als /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/):

for i in `find . -name "*" -type f`; 
    do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`; 
done

Dadurch werden alle Dateien in allen Verzeichnissen darunter (Parent-Collection name)nach verschoben (Parent-Collection name). Dies ist insbesondere eine doSchleife, bei der der Index ijede Datei ab dem aktuellen Verzeichnis durchläuft. Das ist, was der findBefehl auflistet. Sie können die Syntax nachschlagen, indem Sie ausführen man find. Anschließend müssen Sie mvdiese Datei ( $i) an den neuen Speicherort verschieben ( ) . Dieser neue Speicherort wird durch den ursprünglichen Dateinamen ( echo $i) angegeben, der durch den Stream-Editor ( sedmit dem Sie nachsehen können man sed) ausgeführt wird, der so eingestellt ist, dass der Pfad entfernt wird, sodass der Basisdateiname erhalten bleibt.

Ich empfehle es zu testen (erstelle ein Verzeichnis mit ein paar Unterverzeichnissen, die leere Textdateien oder ähnliches enthalten) und stelle sicher, dass du ein Backup hast!

Sie können dann 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 findnach Verzeichnissen ( -type d) anstatt nach Dateien ( -type f) suchen und diese Verzeichnisse dann entfernen ( rmdirwas nur bei leeren Verzeichnissen funktioniert).

Ist Linux nicht cool? Cygwin gibt Ihnen einen Teil der Leistungsfähigkeit von Linux und könnte ein erster Schritt sein, um sich damit vertraut zu machen, sodass Sie eines Tages vielleicht sogar die Möglichkeit haben, auf etwas wie Ubuntu umzusteigen. :)

Diagon
quelle
Danke für Ihre Antwort. Ich benutze eines der älteren Fenster, als es nicht beschissen war :) Ich wünschte, es gäbe ein Windows-Programm oder einen Windows-Befehl, damit ich nicht unbedingt eine Linux-Umgebung ausführen müsste. Außerdem plane ich ein Triple-Boot-Setup, sobald ich meinen Ersatz für diesen Computer erstellt habe.
Zackoftrades333
Multi-Boot ist heutzutage keine wirklich gute Idee. Verwenden Sie am besten ein Betriebssystem und führen Sie andere Betriebssysteme unter Ihrem Hauptbetriebssystem aus, wenn Sie andere benötigen . Mit Virtualbox (VB) ist das ganz einfach. Also installiere VB in Win und dann Ubuntu in VB - oder umgekehrt, oder irgendein anderes Betriebssystem. Das Problem bei Multiboots ist, dass die Betriebssysteme nicht miteinander "sprechen", da Sie immer nur ein Betriebssystem gleichzeitig ausführen. Das ist, was ich tat. Ich habe mit Cygwin angefangen, bin dann zu Ubuntu in VB gewechselt und bin dann zu Ubuntu mit Win in VB gewechselt, um die wenigen Dinge zu erfahren, die auftauchten. Schließlich habe ich Win ganz einfach abgeworfen.
Diagon
Ich plane, die Betriebssysteme mit ihren Programmen auf einer SSD zu haben, während alle meine Daten auf einer separaten Festplatte gespeichert sind, wenn dies einen Unterschied macht. Hoffentlich brauche ich sie nicht, um "miteinander zu reden". Virtualbox bringt auch einige Overheads und andere Dinge mit sich, die nativ ausgeführt werden.
Zackoftrades333
Mit dem Aufwand stimmt das, aber das hängt wirklich davon ab, was Sie tun möchten. Sie werden nicht in VB spielen, das ist sicher! Der Multi-Boot-Ansatz lässt Sie hängen, wenn Sie in einem Betriebssystem etwas in dem anderen tun möchten und dafür keinen Neustart durchführen möchten. Angenommen, Sie verwenden Win mit NTFS und Linux mit ... ext4? btrfs? Sie werden feststellen, dass diese Dateisysteme nicht sehr gut zusammenarbeiten. Wie auch immer, ich habe es irgendwo auf dem Weg versucht und bin sehr schnell zu dem Schluss gekommen, dass es nicht wirklich eine Option ist. Möglicherweise müssen Sie es selbst ausprobieren.
Diagon
Ich habe Cygwin geöffnet und zum richtigen Verzeichnis navigiert, aber ich habe Probleme, den von Ihnen eingegebenen Befehl zu verstehen. Können Sie die Teile aufschlüsseln und erklären, damit ich sie besser verstehe?
Zackoftrades333
1

Dies kann mit Powershell erfolgen, 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 von $sourcefolderwerden in den ParrentCollectionNameOrdner verschoben . Dann können Sie die leeren Unterordner löschen.

Quelle

Wurzel
quelle