文件夹重组脚本

时间:2015-04-23 08:39:59

标签: bash batch-file directory subdirectory

我的目录中包含 .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环境中执行。

2 个答案:

答案 0 :(得分:2)

您可以在BASH中使用此脚本:

shopt -s extglob
shopt -s nullglob

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

答案 1 :(得分:1)

感谢。 我稍微修改了一下脚本。

shopt -s extglob
shopt -s nullglob
echo Process Started
for f in $1*.@(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

我希望脚本读取foldername并使用该名称创建子文件夹,例如:  的 d:\测试\ Servicer1 \ * CSV,* XML

<强> d:\测试\ Servicer2 \ * CSV,* XML

现在,如果我在执行时将&#34; D:\ Test \&#34; 作为参数传递,它应该创建一个目录,如下所示:

<强> \ Servicer1 \ 6573547 \ BILLING \ 582524_1 *的.csv,*。XML

与此同时,我正在努力寻求解决方案,如果你能解决这个问题,它会很棒。