Переместите и переименуйте файлы XML - PullRequest
0 голосов
/ 07 мая 2018

У меня есть 500 таких XML-файлов в / home / ss30

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

и 500 папок в / home / ss30 / с такой структурой «ss30-Username», хотя имя пользователя всегда отличается, но все папки начинаются с ss30-

Все папки имеют один и тот же dir + архивы внутри, что я хочу, чтобы поместить все .xml в определенную папку внутри каждого имени учетной записи в этой папке является / templates /. И как только он находится в / templates /, переименуйте его в templates.xml. Не имеет значения, если 0.xml попадает в ту или иную папку, достаточно одного акларации. Структура всех архивов одинакова, но они имеют разные значения, поэтому все XML-архивы выглядят по-разному.

Все .xml имеют разные значения, но одинаковую структуру Мне нужно 1 xml на папку /templates/.

Ubuntu 16.04, минимальный

1 Ответ

0 голосов
/ 07 мая 2018

Этот скрипт 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.

...