Dr. Mark Humphrys

School of Computing. Dublin City University.

Home      Blog      Teaching      Research      Contact


CA216      CA249      CA318

CA400      CA651      CA668

Sample Shell programs

norm - set permissions as open as possible

chmod  u+rwx,go+rx-w  $*

hide - as hidden as possible

chmod  u+rwx,go-rwx  $*

semihide - just open enough as needed for Web


chmod  u+rwx,g-rwx,o+x-rw  $*
files (web pages, images, etc):
chmod  u+rwx,g-rwx,o+r-xw  $*
CGI scripts:
chmod  u+rwx,g-rwx,o+rx-w  $*
"norm" could of course replace all 3 if you don't mind granting more access than strictly necessary.

rmifexists - silent repeated delete

e.g. Want to be able to repeatedly run:
rmifexists *.bak
and not get error message if no *.bak files found.

for i in $*
        if test -f $i
         rm $i


Why not:

        if test -f $*
         rm $*

Recursive rm

"Trying out some Deadly Linux Commands".
Includes typing rm -rf / and other scary commands, including the hilarious: mv / /dev/null
See more videos of people typing rm -rf /

wipe - clean up editor backup files

rmifexists *%
rmifexists .*% 

rmifexists  *~
rmifexists .*~

rmifexists  *.bak
rmifexists .*.bak

rmifexists  *.BAK
rmifexists .*.BAK
  1. Easier than having to point-and-click each one. Especially if do this for multiple directories.
  2. Safer than typing "rm *bak" every day. One day you will type "rm * bak"
  3. In general, if you regularly type some command that would be dangerous if you make a typo, it would be better to debug it once and put it in a script and never type it directly again.


Write a recursive wipe.

myspace - which of my directories use the most space

cd $HOME
du | sort -n

Command-line image processing

We need libjpeg utilities.
Should be installed on DCU Linux.

To make 1/4 size versions of 10,000 JPEGs without ever opening an image editor (or doing any work):

for i in *jpg

 djpeg  -scale 1/4 -bmp $i  > temp.bmp

 cjpeg  temp.bmp            > small.$i


JPEG needs to be decoded to a BMP (bitmap), then be re-sized, then re-coded back to JPEG.
Can do this in one line, leaving out the temporary file: Pipe result of djpeg into input of cjpeg.


Extract images from PDFs

I was once given an archive of thousands of scanned historical images. They were all inside PDFs.

I automatically extracted all the JPEGs from the PDFs as follows:

for i in *pdf					# i = x.pdf

  x=`basename "$i" ".pdf"`		# get root filename x (without .pdf bit)

  pdfimages  -j  $i  $x  		# extracts images to x-nnn.jpg



Command-line movie processing

You can do command-line movie processing with ffmpeg.

Your Shell script can bulk convert, split, join, rotate and resize thousands of videos. Without opening any window.

Feeds      w2mind.org

On Internet since 1987.