2017-05-29 10 views
-1

Ich habe 12.000 Dateien, die organisiert werden müssen. Alle Ordner sind enthalten, aber die Dateien befinden sich jetzt in einer abgeflachten Dateistruktur.Bash Mac Terminal zur Organisation von Dateistruktur

Eigene Ordner und Dateien sind alle mit dem Pfad benannt, die sie in. In einem Verzeichnis vorhanden sein sollten Zum Beispiel habe ich einen Ordner \textures und eine anderen Ordner mit dem Namen \textures\actors\bear jedoch gibt es keine \textures\actors Ordner mit dem Namen. Ich kämpfe bei der Entwicklung eines Makros, die diese Ordner nehmen und sie an den richtigen Ort, dass jeder Ordner und Dateiname schlägt, dass es sein sollte. Ich würde gerne in der Lage sein, diese automatisch zu sortieren textures und darin wäre actors und innen das wäre bear. Da es jedoch über 12.000 Dateien gibt, bin ich auf der Suche nach einem automatisierten Prozess, der all dies bestimmt und wenn möglich tut.

Gibt es ein Skript, das nach jedem Datei- oder Ordnernamen sucht und erkennt, in welchem ​​Ordner sich die Datei oder der Ordner befinden soll und diese automatisch dorthin verschiebt sowie Ordner erstellt, die nicht im angegebenen Pfad existieren wenn gebraucht?

Dank

+0

Devin, wenn die untenstehende Lösung funktioniert, können Sie das bekannt machen. Vielleicht durch Abstimmung der Antwort. –

+0

Devin, hat diese Lösung funktioniert oder benötigen Sie Hilfe, um Ihr Ziel zu erreichen? –

+0

Warum haben Sie umgekehrte Schrägstriche in den Verzeichnisnamen? –

Antwort

0

eine Verzeichnisstruktur wie folgt gegeben:

$ ls /tmp/stacktest 
    \textures 
    \textures\actors\bear 
     fur.png 
    \textures\actors\bear\fur2.png 

Das Python-Skript unter ihm in diese verwandeln:

$ ls /tmp/stackdest 
    textures/actors/bear 
     fur.png 
     fur2.png 

Python-Skript:

from os import walk 
import os 

# TODO - Change these to correct locations 
dir_path = "/tmp/stacktest" 
dest_path = "/tmp/stackdest" 

for (dirpath, dirnames, filenames) in walk(dir_path): 
    # Called for all files, recu`enter code here`rsively 
    for f in filenames: 
     # Get the full path to the original file in the file system 
    file_path = os.path.join(dirpath, f) 

     # Get the relative path, starting at the root dir 
     relative_path = os.path.relpath(file_path, dir_path) 

     # Replace \ with/to make a real file system path 
     new_rel_path = relative_path.replace("\\", "/") 

     # Remove a starting "/" if it exists, as it messes with os.path.join 
     if new_rel_path[0] == "/": 
      new_rel_path = new_rel_path[1:] 
     # Prepend the dest path 
     final_path = os.path.join(dest_path, new_rel_path) 

     # Make the parent directory 
     parent_dir = os.path.dirname(final_path) 
     mkdir_cmd = "mkdir -p '" + parent_dir + "'" 
     print("Executing: ", mkdir_cmd) 
     os.system(mkdir_cmd) 

     # Copy the file to the final path 
     cp_cmd = "cp '" + file_path + "' '" + final_path + "'" 
     print("Executing: ", cp_cmd) 
     os.system(cp_cmd) 

Das Skript liest alle Dateien und Ordner in dir_path und erstellt unter eine neue Verzeichnisstruktur. Stellen Sie sicher, dass Sie nicht innerhalb dir_path setzen.