Many desktop Linux systems save screenshots with names like
Screenshot from 2020-11-29 18-57-51.png. Often times what you really needed was to rename the files, like
webinar2.png, and so on. Fortunately, renaming some files is very easy to do on the Linux command line.
The Bash shell is very versatile and offers several ways to evaluate values and extend variables. A nice evaluation arithmetic evaluation. To perform this evaluation, wrap your arithmetic statement
The evaluation may also include variable expansion, such as
$sum to resolve into a value. But for the sake of convenience, all Bash variables are in between
)) are automatically expanded. For example, if you want to increase the number of variables by 1
count=$(( count + 1 ))
This is the same as typing:
count=$(( $count + 1 ))
Arithmetic extension supports the same operators as in other programming languages, including
- for addition and subtraction,
/ for multiplication and division, and
% for the rest. You can also use
-- to increase and decrease a value in a variable. Check the man page for Bash, and scroll down to ARITHMETIC EVALUATION, for the full list of supported operators and their priority.
To rename all my screenshots I had to write this one line Bash command:
n=1; for f in Screenshot*.png; do mv -v "$f" webinar$n.png; n=$(( n + 1 )); done
But what does this do?
The first part of the command,
n=1, initializes the variable
n to 1.
Then I use one
for loop to all files starting with
Screenshot and end with the
.png extension. These are usually all the screenshots I took during my last webinar. If I had to be more precise I could include the date in that file specification, like
Screenshot from 2020-11-29*.png. The backslashes are literal escapes to preserve spaces in the file name.
Each iteration of the for loop stores a filename in the f variable. So the
mv -v "$f" webinar$n.png renames any file to my favorite filenames such as
webinar2.png , and so on. I need quotes around the
$f variable extension so that the spaces in
Screenshot from YYYY-MM-DD hh-mm-ss.png Don’t cause any trouble in my
mv order. If you get an error such as
mv: target 'webinar1.png' is not a directory, you probably don’t have quotes around the
Finally, I increase the value in the
n variable so that it is ready for the next iteration in the loop. The arithmetic extension
n=$(( n + 1 )) increases the
n variable with 1.