Problems with filename with spaces (was Pipes and commands thatrequire two arguments)

Matthew Seaman m.seaman at infracaninophile.co.uk
Tue Apr 13 05:42:31 PDT 2004


On Tue, Apr 13, 2004 at 11:33:29AM +0100, Peter Risdon wrote:
> Thanks very much for the previous help - I missed the example in man xargs.
> 
> The files I am trying to manipulate include spaces in the file names, 
> and I cannot seem to escape them effectively. If I try something like:
> 
> #find /usr/home -name *.rtf.exe -print0 | perl -p -e 's/\ /\\\ /g;' | 
> xargs -0 -J % mv % /usr/newplace/
> 
> Then although all spaces are preceded by backslashes I get errors every 
> time a space is encountered. So for a file at /usr/home/user/this is a 
> file.rtf.exe I get file does not exist errors from mv at:
> /usr/home/user/this\
> and at:
> is\
> and at:
> a\
> and at:
> file.rtf.exe (yes, a windows virus on a network share has been busy).
> 
> I have also tried
> 
> #find /usr/home -name *.rtf.exe -print0 | perl -p -e 's/\ /\\\ /g;' > 
> listofdodgyfiles
> 
> and the list is fine. If I paste a line into mv on the command line, it 
> works. If I use a simple script to read the file, same errors as 
> mentioned above.
> 
> I'm sure I'm missing something obvious... Any nudges in the right 
> direction would be gratefully received.

Errr... how about:

    # find /usr/home -name '*.rtf.exe' -print0 | \
       xargs -0 -J % mv % /usr/newplace/

or

    # find /usr/home -name '*.rtf.exe' -print0 | \
        perl -n0e '($x = $_) =~ s,^.*/,/usr/newplace/,; rename $_, $x;'

Note: this puts all of those files into a single directory and doesn't
do anything to avoid overwriting one file with another.  I assume
that's what you want.

This sort of thing is the whole point of '-print0' -- it sidesteps all
of the things the shell does with significant characters when it turns
a command line into an argument list.  ie. no escaping needed.

	Cheers,

	Matthew


-- 
Dr Matthew J Seaman MA, D.Phil.                       26 The Paddocks
                                                      Savill Way
PGP: http://www.infracaninophile.co.uk/pgpkey         Marlow
Tel: +44 1628 476614                                  Bucks., SL7 1TH UK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20040413/de7ff5b6/attachment.bin


More information about the freebsd-questions mailing list