Alle Ordner auflösen


1

Ich habe einen Ordner mit ungefähr hundert Unterordnern und wieder hat jeder von diesen zwischen 10 und 20 Unterordner, also alles in allem ein ziemlich großer Ordnerbaum.

Kann ich auf einfache Weise alle Dateien im Baum in einen neuen Ordner auflösen oder exportieren, in dem nur ein Ordner die Dateien enthält (keine Ordner, keine Bäume)?

Ich verwende OS X 10.8, obwohl ich auch Parallels habe. Wenn es also eine Windows-Lösung gibt, kann ich das einfach ausführen, da ich das nicht jeden Tag tun muss.


Klingt so, als ob Sie einen rekursiven MV-Befehl benötigen, der alles mit einer Erweiterung an einen statischen Speicherort verschiebt. stackoverflow.com/questions/18295056/… stackoverflow.com/questions/4357233/… superuser.com/questions/205083/…
MonkeyZeus

Antworten:


5

In OS X sollte dies funktionieren:

find /top/source/directory -type f -exec mv {} /destination/directory \;

Das find Befehl durchsucht alle Unterverzeichnisse des Ordners /top/source/directoryund findet nur die Dateien (die Option -type f ). Wenn es einen findet, führt es aus ( -exec ) der Befehl mv in der Datei, die es gerade gefunden hat ( {} ), um es in das neue Verzeichnis zu verschieben, /destination/directory.

Bitte beachten Sie, dass der Raum vor \; ist absolut notwendig.


Seien Sie gewarnt, dass dadurch alle Dateien verschoben werden und dass sie sich nicht mehr in der Origanalstruktur befinden.
CyberJacob

Was ist mit dem Überschreiben von Zieldateien, wenn die Dateinamen identisch sind?
pbies

Wenn Sie überschreiben möchten, verwenden Sie mv -f; Wenn Sie nicht überschreiben möchten, geben Sie mv -n ein. Wenn Sie von Fall zu Fall entscheiden möchten, geben Sie mv -i ein
MariusMatutiae

0

Dies sollte auf der Windows-Seite in funktionieren Power Shell :

Get-ChildItem -Path "C:\Source" -Recurse -Include *.* | Move-Item -Destination "C:\Destination\"


0

Diese Antwort basiert auf Python, sollte also sowohl unter OSX als auch unter Windows funktionieren, vorausgesetzt, Sie installieren Python (und das ist im Grunde genommen von ganz oben).

import os
import shutil

path = "C:/dir"    # the directory tree you want to "explode"
store= "C:/store"  # where all files will be stored

for dirpath, dirnames, filenames in os.walk(path):

    name = ""
    for c in dirpath:
        if c != "/":    # if the character is different than the current directory character
            name += s
        else:
            name += "_" # "quick and dirty" way of resolving name conflicts

    for files in filenames:

        orig_loc = os.path.join(dirpath,files)
        copy_loc = os.path.join(store,name + "_" + files)
        shutil.copy2(orig_loc,copy_loc)

Dies sollte alle Dateien (plus Metadaten) von der kopieren path Struktur zum store Mappe.

Wenn Sie sich nicht für Namenskonflikte interessieren, verwenden Sie nicht den Code zwischen name = "" und das for files in filenames Aussagen. Was dieser Code tut, ist zu konvertieren / zu _ und stellen Sie anschließend den gelöschten Verzeichnisnamen den Dateinamen voran.

Dadurch bleibt die ursprüngliche Struktur erhalten, die Sie anschließend mit löschen können shutil.rmtree(path)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.