Fraser Campbell <fraser@wehave.net> [2003-01-04 21:51:21 -0500]: > On January 4, 2003 09:20 pm, the fabulous Gerald V. Livingston II wrote: > > > Thank you. Took a couple of tries to get the syntax correct but I > > ended up with this: > > > > if [ `ls *.jpg 2>/dev/null|wc -l` -gt 0 ] > > then for i in *.jpg; do mmv "$i" `date +%s`-$a.jpg; a=a+1; done > > fi What does 'mmv' buy you over using the more standard 'mv' in this example? Just curious. You were not using any of the mmv features that I could tell here. > If there were thousands of jpgs you'll probably still get a "too many > arguments" error with that for loop. I usually do something like this: > > ls *.jpg | while read i; do > mv "$i" `date +%s`-$a.jpg; a=a+1 > done > > If there are no files, no problem, if there are 10,000 files also no problem > (although there might be a faster way?). That works. I prefer 'xargs' myself. Consider this alternative, not replacement, example. Also you do have the shell to help you out with your unique name generation and I don't. (Of course I only have the 'echo' there for testing because I am paranoid that someone would cut and paste this literally.) The {} is replaced with each name read from standard input in turn. find . -name '*.jpg' -print0 | xargs -r0 -i echo mv {} /path/to/there/ However, if this is a command that is run frequently as I seem to recall the OP saying earlier in this thread then I would assume that it would not be possible to get up to ARG_MAX and would do the simpler for loop above. Bob
Attachment:
pgp5CevAGq0nd.pgp
Description: PGP signature