Another fun week of tinkering! Here’s what I learned:
How to implement a for loop in bash scripts using seq
.
I’ve been working on a script to create folders for my tv show library to play nice with my Jellyfin server. What I wanted was for the script to:
index showname year tmdb-id
Show.Name.(YYYY).[tmdbid-xxxxx]
Since the number of results will vary from query to query, I couldn’t use a preset range like {0..5}
for my for loop. I tried without success to have the loop iterate through the JSON response, but I was unable to figure out how to do that.
So, while likely inelegant, What I did was:
jq
, get the number of resultsjq
indexes start with 0, take the number of results and subtract 1, setting the results of that calculation as my $count
variablefor i in $(seq 0 $count) ; do
to create the indexed list of results to choose fromHow to use jq
to work with and extract data from JSON objects
I’m just scratching the surface of jq
, but I’m finding it very useful! I’ve worked with JSON before making automations on iOS with the Shortcuts app, so getting up and running with jq
was pretty easy once I understood the syntax.
Note: I know tools like Filebot exist to do the kind of thing I’m doing with this script. I’m writing my own scripts from scratch in order to learn
Git and Github are different things
On my post last week a number of people suggested using Git. I already was aware of Github, and because I didn’t know what I didn’t know, I thought Git and Github were parts of a whole. I also generally knew that Git/Github are used for version control, but that was the extent of my knowledge. I still know very little, but I do now understand that Git and Github are independent things that can work together.
I also went ahead and set myself up a gitea instance on my server for when I’m ready to create repositories for myself for my scripts and dotfiles
I didn’t get to spend as much time tinkering and learning this week, but I still learned some new things!
find
, particularly with regex. This is ongoing. I’ve been using find for awhile, but not with full understanding of it’s options and syntax. I’m starting to get a better understanding of how to use it to find and manipulate the files I’m looking for. One of the biggest things that’s tripping me up with find
and regex is designating the path.adduser -m username
, sudo passwd username
, but what I didn’t know anything about was --skel
for copying over the skeleton shell config files. I didn’t even know the skeleton config files existed.$
prompt. No user@host
, and no working directory. After some reading I found that adding PS1='$(whoami)@$(hostname):$(pwd)$ '
to ~/.profile will show a more traditional user@host:working/directory$
prompt. I’m sure this is not the only way to do this, and may not be the best way to do it, but based on my limited knowledge, it is the way that I’m currently doing it on my vps.I’ve been homelabbing for a few years now, and recently I’ve really been focusing in on learning how to use gnu/linux. I thought it might be fun to periodically share the things I’ve been learning. The stand outs for me this past week were:
${file##*/}
will get you the name of the file your script is handling (example, when looping over files in a directory. I believe that’s a shell/bash standard variable, but I need to learn where it came from and how it works)ls
to grep
as a variable in a path is a great way to change to a directory you know exists but can’t remember the exact name of. (Example: cd ~/movies/“$(ls ~/movies | grep movie-name)”
)EDIT: Putting this at the top because not everyone is seeing what I actually need. I can unpack the rar archive just fine. What I can’t do (on arm) is add to/update the files in the rar archive. I have unrar already installed. What I can’t install is the rar package to create/update rar archives.
So I’ve been banging my head against the wall for about half an hour trying to install the rar package from the multiverse repository on an Ubuntu 23.10 vm I have running on my m1 mac mini. I finally ended up on https://pkgs.org and searched up rar to see if I could download it directly instead of using apt.
And it was there I realized there’s no arm version of rar.
Side note, any recommendations for an arm utility that handles rar files? I already have unrar-free installed, but what I need is something to update/add files to existing rar files.
Worst case scenario I unrar them and then repackage them with tar or zip, but if I can just work with the rar archive, I’d prefer that.
Edit: I got excited for a second remembering that I’ve got rar installed via homebrew on that same m1 mac, but when I tried to install homebrew in the vm, I learned that homebrew doesn’t officially support arm.
I've been reading Mastering Regular Expressions by Jeffrey E.F. Friedl, and since nobody in my life (aside from my wife) cares, I thought I’d share something I'm pretty proud of. My first set of regular expressions, that I wrote myself to manipulate the text I'm working with.
What’s I’m so happy about is that I wrote these expressions. I understand exactly what they do and the purpose of each character in each expression.
I've used regex in the past. Stuff cobbled together from stack overflow, but I never really understood how they worked or what the expressions meant, just that they did what I needed them to do at the time.
I'm only about 10% of the way through the book, but already I understand so much more than I ever did about regex (I also recognize I have a lot to learn).
I wrote the expressions to be used with egrep and sed to generate and clean up a list of filenames pulled out of tarballs. (movies I've ripped from my DVD collection and tarballed to archive them).
The first expression I wrote was this one used with tar and egrep to list the files in the tarball and get just the name of the video file:
tar -tzvf file.tar.gz | egrep -o '\/[^/]*\.m(kv|p4)' > movielist
Which gives me a list of movies of which this is an example:
/The.Hunger.Games.(2012).[tmdbid-70160].mp4
Then I used sed with the expression groups to remove:
.[
to the endAnd the last expression checks for one or more spaces and replaces them with a single space.
This is the full sed command:
sed -Eie 's/^\///; s/\.\[[a-z]+-[0-9]+\]\.m(p4|kv)//; s/[^a-zA-Z0-9\(\)&-]/ /g; s/ +/ /g' movielist
Which leaves me with a pretty list of movies that looks like this:
The Hunger Games (2012)
I'm sure this could be done more elegantly, and I'm happy for any feedback on how to do that! For now, I'm just excited that I'm beginning to understand regex and how to use it!
Edit: fixed title so it didn’t say “regex expressions”
I just started listening to Lessons in Chemistry, and so far it’s excellent. It’s also depressing. I (a mostly cishet male), know cognitively that women have faced horrific treatment and discrimination for thousands of years. So far, the writing in Lessons in Chemistry is very good at making something I know as a fact feel very visceral.
That’s a good thing, and I hope many men read this and experience it in a similar way as I am, though I fear the sorts of men that need to experience this are not the sort of men that are likely to read this book.
@harsh3466
@lemmy.world