Shell Scripting is Useful
.The title of this post is meant as understatement.
I’ve been (finally!) moving content from my various old sites to tadhg.com, and shell scripting has been extremely useful for this.
The first task I automated was batch renaming. I had a lot of files that started with “seam”, and I wanted to strip that out of them. This is the shell script I used to do it:
#!/bin/sh
for i in $@
do
j=`echo $i | sed -e s/string/replace/`
echo Renaming file $i to $j
mv $i $j
done
It applies the replacement to the files passed to it (e.g. “/.rename.sh *” will apply it to all the files in the current directory). It’s pretty simple, and it relies upon the replacement being something that can be turned into a regular expression—but that is quite often the case. Really, it’s somewhat shameful that I didn’t learn how to do this years ago…
Also for the seamless images I was moving over, I needed to create a lot of slightly-differing HTML files, each doing nothing but displaying the seamless image as a background. The HTML files would also have the same name as the image file, .html instead of .jpg. This is the code for that:
#!/bin/sh
for i in $@
do
j=`echo $i | sed -e s/\.jpg//`
touch $j.html
k='HTML preceding the image name'$j'.jpg and HTML following the image name'
echo $k | cat > $j.html
done
Finally, having brought the content over, I had to point all of the old files to the new location. With domains under my control, that’s pretty easy, as I just use Redirect and RewriteRule Apache directives to do it. But the oldest content, on my Netsoc account (dating back to 1996…), is on a domain where I can’t do that. So I have to insert
(less-than sign)meta http-equiv="refresh" content="0;url=http://tadhg.com/wp/1998/11/30/seamless-backgrounds/"(greater-than sign);
into the head element of every file for that. Here I ended up using Perl, because I found a helpful reference for it. I also think perl is fairly ubiquitous, so I don’t feel too bad that I didn’t learn a ‘real’ shell scripting equivalent for this. I decided to add the meta element above the title element, like so:
perl -pi -e 's/<title>/(less-than sign)meta http-equiv="refresh" content="0;url=http:\/\/tadhg.com\/wp\/1998\/11\/30\/seamless-backgrounds\/"(greater-than sign)\n<title>/' seam*.html
This worked extremely well, and saved me a lots of repetitive pasting. If you ever find yourself having to repeat tasks in a Unix environment, it’s probably worth it to investigate automatic them with shell scripts.
15 Jan 2007 at 00:47
Your RSS feed actually takes out the
in the meta refresh line, so this story is impossible to read via RSS in Safari :-)
15 Jan 2007 at 02:53
Niall – I had no idea you were a Mac user! Or perhaps you went that way long ago, and I never kept up…
I’m getting more into the command line strategies for handling files, but I was actually going to go to the trouble of writing a PHP script for taking my photos and then organising them into directories by date, and renaming them, using the EXIF data. Could I do this with a shell script? Tadhg, Niall?
15 Jan 2007 at 06:25
Of course. You need the exif module for your PHP script, but it’s pretty easy.
15 Jan 2007 at 06:26
I mean it’s easy with a PHP script, more difficult with a shell script – and you can call PHP from the command line just as well…
15 Jan 2007 at 06:34
Yes, that’s right, I know exactly how to do it all with PHP and thought about the design and execution of such an app, but that doesn’t mean it’s the best solution; do you think the shell script would be a more efficient way of doing it (in terms of file handling and efficiency), or do you think that PHP’s file handling will be close to native anyway?
My knowledge of PHP isn’t the only reason for why I thought of doing it with PHP, it’s also for the reason that the work/code will be re-usable in a web context (which I’ll definitely make use of). On the other hand, it would be nice to invoke a script from inside the shell and have it as a command-line app.
15 Jan 2007 at 11:47
shell suits are nice also and they transend the fical geological strata of fashion.
“Always same, always same…. sports casual….. always same.”
Goes the hiko!
Tadhg, check out this article written by Zadie Smith for the Gaurdian, it provides possible answers and numerable questions all of them worth while!
http://books.guardian.co.uk/review/story/0,,1988887,00.html