【问题标题】:Folder restructure script文件夹重组脚本
【发布时间】:2015-04-23 08:39:59
【问题描述】:

我有一个目录,其中包含 .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 环境中都可以执行。

【问题讨论】:

标签: bash batch-file directory subdirectory


【解决方案1】:

你可以在 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

【讨论】:

  • 也许它需要很少的修改,它为每个文件创建子文件夹,
【解决方案2】:

谢谢。 我稍微修改了脚本。

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

我希望脚本读取文件夹名称并使用该名称创建子文件夹,例如: D:\Test\Servicer1\*.csv,*.xml

D:\Test\Servicer2\*.csv,*.xml

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

\Servicer1\6573547\BILLING\582524_1*.csv,*.xml

同时,我正在尝试一个解决方案,如果你能解决这个问题,那就太好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2014-12-30
    • 1970-01-01
    相关资源
    最近更新 更多