2017-05-29 123 views
-1

我有12,000多個需要組織的文件。所有的文件夾都包含在內,但是文件現在處於展開的文件結構中。Bash Mac終端組織文件結構

我的文件夾和文件都被命名爲它們應該在的路徑。例如,在一個目錄下我有一個名爲\textures文件夾並命名爲\textures\actors\bear但沒有\textures\actors文件夾中的另一個文件夾。我正在努力開發一個宏,將採取這些文件夾,並把他們在每個文件夾和文件名建議它應該在正確的位置。我想能夠自動排序這些textures和內部將是actors和裏面那將是bear。但是,有超過12,000個文件,因此我正在尋找一個可以確定所有這一切的自動化流程,只要可能就做到這一點。

是否有腳本會查看每個文件或文件夾名稱,並檢測文件或文件夾應位於目錄中的哪個文件夾,並自動將其移動到那裏以及創建任何不存在於給定路徑中的文件夾需要的時候?

感謝

+0

德文,如果下面的解決方案有效,你可以讓這個知道。也許通過投票回答。 –

+0

德文,做了這個解決方案的工作還是你需要幫助來實現你的目標? –

+0

爲什麼在目錄名稱中有反斜槓? –

回答

0

給定的目錄結構是這樣的:

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

下面的Python腳本會變成這樣:

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

Python腳本:

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) 

該腳本讀取dir_path中的所有文件和文件夾,並在dest_path下創建新的目錄結構。確保你不要把dest_path放在dir_path之內。