Я думаю, что проблема здесь в том, что nc
не является правильным решением. Прослушивание nc
никогда не завершается, поэтому оно будет продолжать добавляться к файлу.
Почему бы не использовать scp
или rsync
? Если у вас запущен sshd
на целевой машине, вы можете использовать любой из них. Если нет, сделайте это или запустите rsync
в режиме демона.
Каждый раз, когда вы запускаете scp
или rsync
на отправителе, получатель перезаписывает файл.
Вы можете разделить файл popis.txt
на 5000+ временных файлов с помощью команды split(GNU coreutils ):
split -d -a4 -l5 popis.txt split
Это создает файлы split0001
, split0002
,... с пятью строками в файле и немного упрощает дальнейшую обработку.
Создайте свой модифицированный скрипт и сохраните его какscript.sh
:
#!/bin/bash
for file; do
while read -r line; do
if [[ "$line" = "<artist>"* ]]; then
artist=$line
elif [[ "$line" = "<song>"* ]]; then
song=$line
elif [[ "$line" = "<album>"* ]]; then
album=$line
elif [[ "$line" = "<year>"* ]]; then
year=$line
else
# remove prefix `#FILENAME "` and the last quote `"`
filename=$(echo "$line" | sed 's/[^"]*"//;s/"[[:space:]]*$//')
fi
done < "$file"
echo "<?xml version='1.0' encoding='UTF-8'?><Metadata>${artist}${song}${album}${year}</Metadata>" > "$filename"
done
Сделайте ваш скрипт исполняемым и запустите его на всех splitXXXX
файлах:
chmod +x script.sh
./script.sh split*
Если все прошло хорошо, для каждого входного файла должен быть создан один XML-файл, и вы можете удалить временные файлы:
rm split*