2015-04-23 113 views
1

我有一個目錄,其中有.txt, .csv,*。xml文件。文件夾重組腳本

原來的文件夾結構:/Servicer/*.txt,*.csv,*.xml

的文件命名慣例如下:

1. 6573547_BILLING_582524_1_00001.csv 
2. 6573547_BILLING_582524_1_00001.txt 
3. 6573547_BILLING_582524_1_00001.xml 
4. 6573547_BILLING_582524_1_00002.csv 
5. 6573547_BILLING_582524_1_00002.txt 
6. 6573547_BILLING_582524_1_00002.xml 
7. 6573545_BILLING_582524_1_00002.xml 
8. 6573545_BILLING_582524_1_00002.csv 

我的要求是,以下面創建一個文件夾結構,並有文件夾內的文件。

所需的文件夾結構:

/Servicer/6573547/582524_1/*.txt,*.csv,*.xml 
/Servicer/6573545/582524_1/*.txt,*.csv,*.xml 

腳本應該是Windows可執行文件,以及Linux環境。

+0

你嘗試過什麼嗎? – anubhava

+0

嘗試了這個http://stackoverflow.com/questions/9006354/folder-names-based-on-filenames,但並不真正符合要求 – Maverick

+0

如果您需要多平臺(Linux,Windows)支持,您應該考慮Python。 –

回答

2

您可以在BASH使用這個腳本:

shopt -s extglob 
shopt -s nullglob 

for f in *[email protected](csv|xml|txt); do 
    IFS=_ read -ra arr <<< "$f" 
    p="/Servicer/${arr[0]}/${arr[2]}_${arr[3]}" 
    mkdir -p "$p" 
    mv "$f" "$p/" 
done 
+0

也許它需要很少的修改,它爲每個文件創建子文件夾, – Maverick

+0

我有一些錯別字。試試我現在更新的答案 – anubhava

+1

謝謝。這工作完美。 – Maverick

1

感謝。 我已經修改了一下腳本。

shopt -s extglob 
shopt -s nullglob 
echo Process Started 
for f in $1*[email protected](csv|xml|txt); do 
    IFS=_ read -ra arr <<< "$f" 
    p="${arr[0]}/${arr[1]}/${arr[2]}_${arr[3]}" 
    mkdir -p "$p" 
    cp "$f" "$p/" 
     echo File $f is copied to $p 
done 
echo Process Finished 

我希望腳本讀取文件夾名並使用該名稱,如子文件夾: d:\測試\ Servicer1 \ *。csv格式,* XML

d:\測試。\ Servicer2 \ * CSV,XML *

現在,如果我通過「d:\測試\」作爲參數,同時執行,它應該創建如下目錄:

\ Servicer1 \ 6573547 \ BILLING \ 582524_1 * .CSV,*。xml的

同時,我想解決的辦法,這將是巨大的,如果u能解決這個問題。