[OT] Need some bash scripting assistance

Roberto Ragusa mail at robertoragusa.it
Thu Jun 10 16:14:02 UTC 2010

Marko Vojinovic wrote:
> Hi folks! :-)
> This is the story: I have a directory full of files named as:
> 01 Some file
> 02 Some other file
> 03 & yet another file
> 04 etc...
> There is also a symbolic link called "target" pointing to one of them.
> The numbers at the beginning of file names are there so that there is
> some specific ordering of files. What I need is a bash script that
> will determine the name of the file that goes after the one target
> points to, and relink the target to point to that one instead.
> So if target points to "02 Some other file", after executing the
> script it should point to "03 & yet another file". When the target
> reaches the end it should restart from the beginning. Files typically
> have spaces and other escapable characters that should be properly
> taken care of.
> Can anyone point me into the easiest way of doing this?
> What I am actually doing is more complicated, but this step is where I
> am a bit clueless... :-)

If it is the "rotation" part you want help on, I can give you some

You find the name of the linked file with
  find target -printf "%l\n"

You find the new destination for target with
  ls|grep -A1 "$oldtarget"|tail -1

The end-of-list condition can be handled with an additional dummy
file and then an explicit if [ "$newtarget" == "ZZZ_after_the_last" ]
approach. Or you can use a trick like "(ls;ls)|grep -A1 ...".

Is that enough for you to go on?

Take care of the strange characters in filenames, as others have rightly
pointed out.

   Roberto Ragusa    mail at robertoragusa.it

More information about the users mailing list