Looks like you covered it well, except for white space in files.
Just one more thing to consider is that file names might be in non-ascii character set(?). So use "tr [:upper:] [:lower:]" to cover this option.
You can probably get the same effect as the use of "tac" with find's "-depth" switch.
I'd put your script in a file and run it with "find ... -print0 | xargs -0 your-move-script" that way you cover for white space in file names and such. (or, if I read sh(1) right then you can read output of "-print0" with "read -d\\0")
Cheers,
--Amos
Simon Bowden wrote:
On Wed, 11 Aug 2004, Simon Bowden wrote:
Possibly only lowercase relative links: if [ -L "$file" -a "${file:0:1}" != "/" ]; then ...
Oops, I'm going to be pedantic. This should be: mv "$file" "$newname" if [ -L "$file" ]; then target=$(ls -l "$file" | sed 's/^.* -> //' if [ "${target:0:1}" != "/" ]; then newtarget=$(echo "$target" | tr A-Z a-z) ln -sf "$newtarget" "$newname" fi fi
Since $file is the symlink name, not the target name.
Extra pedant - I also realised we should use a raw read: find ... | while read -r file ; do ...
since then the filenames with backslash escapes in them (which probably wouldn't be there, but still...).
Errr, k, nuff now :) Fun with shell.
Cheers,
- Simon
-- SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/ Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html