移动并重命名 Xml 个文件

Move and rename Xml files

我在 /home/ss30

中有 500 个 xml 这样的文件

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

/home/ss30/ 中的 500 个文件夹具有这些结构 "ss30-Username" 虽然用户名始终不同但所有文件夹都以 ss30-

开头

所有文件夹都有相同的 dir+ 存档,我想要的是将所有 .xml 放在一个特定的文件夹中,此文件夹中的每个帐户名都是 /templates/。 一旦在 /templates/ 中,将其重命名为 templates.xml 只是一个声明,0.xml 是否转到一个文件夹或另一个文件夹无关紧要。所有档案的结构都是相同的,但它们具有不同的值,因此所有 .xml 档案看起来都不一样。

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

Ubuntu 16.04 lts 最小值

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

#!/bin/bash
set -euo pipefail

# change the directory to the first argument
cd ""
# 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 和 运行,第一个参数是包含 [=23] 的文件夹的路径=] 文件和 ss30-Username 文件夹,例如 ./script.sh /path/to/xml_and_ss30_folders