我的目录中包含 .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 :(得分: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 强>
与此同时,我正在努力寻求解决方案,如果你能解决这个问题,它会很棒。