2015-04-23 66 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能解决这个问题。