移动并重命名Xml文件

时间:2018-05-07 11:18:21

标签: linux unix ubuntu-16.04 sysadmin

我在/ home / ss30

中有500个这样的xml文件

0.xml 1.XML 2.XML ..... 500.xml

/ home / ss30 /中的500个文件夹具有这些结构 “ss30-Username”,而用户名总是不同,但所有文件夹都以ss30开头 -

所有文件夹都有相同的目录+档案里面我想要的是将所有.xml放在特定文件夹内的每个帐户名称关闭此文件夹是/ templates /。 一旦在/ templates /中将其重命名为templates.xml 如果0.xml转到一个文件夹或另一个文件夹,那么只需要一个声明即可。所有档案的结构都是相同的,但它们具有不同的值,因此所有.xml档案看起来都不同。

所有.xml具有不同的值但结构相同 我需要1 xml每个文件夹/ templates /.

Ubuntu 16.04 lts minimal

1 个答案:

答案 0 :(得分:0)

此bash脚本会将排序的xml文件列表与按字母顺序排列的ss30-Username文件夹列表配对,然后将每个xml文件移动到名为ss30-Username/template/template.xml的配对目标。
我没有测试脚本,希望它无论如何都能帮到你。

#!/bin/bash
set -euo pipefail

# change the directory to the first argument
cd "$1"
# all xml files named starting with a number followed by anything, sorted
allxmls=$(printf "%s\n" [0-9]*.xml | sort)
# all user folders sorted
allfolders=$(printf "%s\n" ss30-* | sort)
# check if number of xmls is the same as folders
if [ $(echo "$allxmls" | wc -l) -ne $(echo "$allfolders" | wc -l) ]; then
   echo "ERROR number of xmls is different then number of folders"
   echo "Terminating..."
   exit 1
fi
# pair xmls with folders
pairs=$(paste <(echo "$allxmls") <(echo "$allfolders"))
# for every pair read xml and folder
while read xml folder; do
   # create template folder inside folder
   mkdir -v -p "$folder"/template
   # move xml inside the folder and rename it to template.xml
   mv -v "$xml" "$folder"/template/template.xml
# read pairs
done < <(echo "$pairs")

如果将其保存到名为./script.sh的文件中,请向其chmod +x ./script.sh添加可执行权限并运行它,第一个参数是包含xml文件和ss30-Username文件夹的文件夹的路径,像这样./script.sh /path/to/xml_and_ss30_folders