this post was submitted on 26 Aug 2023
27 points (100.0% liked)

Linux

47361 readers
1065 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I'm updating foundry to a version 11 and it broke an ass ton of my assets cause they're all "verified version 10"

So all I have to do is change that number, they're just maps so no need to update anything else, but I have like 400+ files to convert all in individual folders.

Please tell me there's an easy way to do this. (I'm on Linux obviously)

you are viewing a single comment's thread
view the rest of the comments
[–] Ithorian@hexbear.net 1 points 1 year ago* (last edited 1 year ago) (1 children)

Here's the GitHub link to one of the batches of files I'm working with.

This line ,,"compatibility":{"minimum":"9","verified":"10"}," needs to say" 11" in all the files

[–] blashork@hexbear.net 4 points 1 year ago* (last edited 1 year ago) (4 children)

I have made a python script and ran it on a clone of your git repo to confirm it works, simply run it at the root directory of wherever the files are, it will walk through and find module.json and do the replace.

#!/usr/bin/env python3

import re
import os

import fileinput

pattern = re.compile(r'(?P\.+)\"compatibility\":{\"minimum\":\"(?P\\d+)\",\"verified\":\"(?P\\d+)\"},(?P\.+)')

def make11(match):
    if match.groupdict().get('min', None) and match.groupdict().get('ver', None):
        return f"{match.groupdict()['pre']}\"compatibility\":{{\"minimum\":\"11\",\"verified\":\"11\"}},{match.groupdict()['post']}"

for root, dirs, files in os.walk("."):
    for file in files:
        if file == "module.json":
            for line in fileinput.input(f"{root}/{file}", inplace=True):
                print(re.sub(pattern, make11, line))

edit: lemmy is fucking with the formatting and removing the fucking regex group names, which will bork it. I've tried fixing it, dm me if you want me to send a downloadable link to the script

[–] umami_wasbi@lemmy.ml 6 points 1 year ago

If using Python, why not just use JSON module? Simpler and easier maintain without all those regex.

Still +1, on sed if one is on Linux.

[–] Kangie@lemmy.srcfiles.zip 6 points 1 year ago

Neat script; just a touch overkill IMO compared to just using sed and bash!

Changing the minimum may be undesirable - I think it's only the latter value that needs to go from 10 -> 11.

[–] Ithorian@hexbear.net 1 points 1 year ago

Holy shit that's awesome! Thanks