bergman on 22 Feb 2006 15:12:09 -0000 |
In the message dated: Wed, 22 Feb 2006 09:39:56 EST, The pithy ruminations from Art Alexion on <[PLUG] bash script help needed> were: => => I am trying to iron out a script that renames all files in a current => directory to replace embedded spaces with underscores, and makes => everything lower case. A common need...and a fun "quiz" type interview question. => => The suggestion that I was given was (in pertinent part): => => for OLD in * => do => NEW=`echo $OLD|sed s/\ /\_/g | tr [:upper:] [:lower:]` => echo "OLD=\"$OLD\"" => echo "NEW=\"$NEW\"" => echo -e "mv \"$OLD\" \"$NEW\"\n" => done => => But while the messages sent to the console indicated what I wanted to do => was happening, and there were no errors reported, no changes were => actually being made to the filenames. => => I read the echo man page and it seemed that the line => => echo -e "mv \"$OLD\" \"$NEW\"\n" => => didn't actually execute the mv command, so I added the line => => mv $OLD $NEW OK. => => after it, so it now reads => => for OLD in * => do => NEW=`echo $OLD|sed s/\ /\_/g | tr [:upper:] [:lower:]` => echo "OLD=\"$OLD\"" => echo "NEW=\"$NEW\"" => echo -e "mv \"$OLD\" \"$NEW\"\n" => mv $OLD $NEW => done => => But this results in the error => => mv: when moving multiple files, last argument must be a directory Good. You're actually lucky to get this message. I've seen instances where this kind of simple programming error has destroyed a production e-commerce database server... What doe the echo statements display before the error message? Are they: OLD="*" NEW="*" mv "*" "*" That's what I'd expect if there are no files or directories in the current directory. => => even though $NEW does not yet exist, so I am not really moving multiple => files. The issue isn't that $NEW doesn't exist, but that the initiall expansion of the "*" wildcard failed to produce a list of files to be renamed, thus the literal character "*" is passed to the mv command. When the shell gets that command, it tries to expand "*", producing the error. => => What am I doing wrong? Well, what you're "doing wrong" is not checking the results of the metacharacter expansion before calling mv(1). The action of mv will vary, depending on what files and directories are in the directory where the script is executing. I'd suggest that you go back and take another look at the thread "Interactive rm" from a couple of weeks ago. That thread deals with this very issue--how the shell handles wildcard expansion. You may also want to look at: http://www.oreilly.com/catalog/bash3/ http://www.oreilly.com/catalog/shellsrptg/ Mark ---- Mark Bergman bergman@merctech.com Seeking a Unix/Linux sysadmin position local to Philadelphia or via telecommuting http://wwwkeys.pgp.net:11371/pks/lookup?op=get&search=bergman%40merctech.com => => -- => => _______________________________________ => Art Alexion => Arthur S. Alexion LLC => => PGP fingerprint: 52A4 B10C AA73 096F A661 92D2 3B65 8EAC ACC5 BA7A => The attachment -- signature.asc -- is my electronic signature; no need for alarm. => Info @ http://mysite.verizon.net/art.alexion/encryption/signature.asc.what.html => => Key for signed PDFs available at => http://mysite.verizon.net/art.alexion/encryption/ArthurSAlexion.p7c => The validation string is TTJY-ZILJ-BJJG. => ________________________________________ => => => --------------enig14E73DE54C91A8F7AFB7398C => Content-Type: application/pgp-signature; name="signature.asc" => Content-Description: OpenPGP digital signature => Content-Disposition: attachment; filename="signature.asc" => => -----BEGIN PGP SIGNATURE----- => Version: GnuPG v1.4.1 (GNU/Linux) => Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org => => iQCVAwUBQ/x3vELG/oYII0YuAQJUCwP/cp5qM6ZoT6VPmZlqFfa9T3K0brhBQ7/A => icwbq2Fuu+YV0Z54c1sbD9JfXYXGq/lQySHqs/Cfqg62dU+A5qR1me0Hu4HQyjgU => nkniyuJJpB/bmmHW1Do/MthYp3DIhYzTdrDCw8Xo/1e2temd9iUeNYqvQ19oCsBt => gHYrP/CWRKI= => =j4DK => -----END PGP SIGNATURE----- ___________________________________________________________________________ Philadelphia Linux Users Group -- http://www.phillylinux.org Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
|
|