Re: mv multiple files w/wildcard
Lance Hoffmeyer <lanceh@ibm.net> wrote:
>I have a number of subdirectories where I have files with - such as
>name - title.txt and I wish to convert them to:
>name: title.txt
>
>In bash I tried:
>
>for i in *-*;do mv $i `echo $i | sed -e 's/ - /:/'`'done
>
>but this gives me an error about moving multiple files and needing a directory
You need some additional quoting:
for i in *-*; do mv "$i" "`echo $i | sed -e 's/ - /: '`"; done
... works for me.
>I also tried on e-line perl script
>
>perl -we '($new=$_) =~tr/\s-\s/:\s/ && rename _$,$new'
^^ Did you mean $_ here?
>but I get uninitialized value errors.
Yes, because Perl doesn't normally automatically iterate over its input;
you can do it manually, or various switches, like -n, cause it to do so.
tr/// is the wrong operator to use, too; see 'perldoc perlop'.
This works:
ls -1 | perl -wne 'chomp; ($new=$_) =~ s/ - /: / and rename $_, $new'
You could also opendir() and readdir() yourself, though that's probably
too much effort for a one-liner. And, as somebody else has said, you
might as well just use the rename(1p) utility that comes with Perl.
>Also, how would I use these for multiple subdirectories at once?
Look for the recent discussion on this list on the use of find and
xargs.
--
Colin Watson [cjw44@flatline.org.uk]
Reply to: