Date: Sat, 11 Feb 2012 09:16:06 +0000 From: Matthew Seaman <matthew@FreeBSD.org> To: freebsd-questions <freebsd-questions@FreeBSD.org> Subject: Re: 'rm' Can not delete files Message-ID: <4F3631D6.3070109@FreeBSD.org> In-Reply-To: <4f368a47.b9IiheSL9TAxtlPw%perryh@pluto.rain.com> References: <1237723287.20120207235924@yandex.ru> <4F31A260.20109@infracaninophile.co.uk> <20120207231716.31aa8bc3@gumby.homeunix.com> <20120209032544.GA58560@ozzmosis.com> <CAE7N2kdmbm_5=c8oNknYQE5HOrvVjtfS4XTGYvxTjEQVbGr-7Q@mail.gmail.com> <4F3541D6.5080505@infracaninophile.co.uk> <4f368a47.b9IiheSL9TAxtlPw%perryh@pluto.rain.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig342F3E1EDFC2B38E58C3EB8B Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 11/02/2012 15:33, perryh@pluto.rain.com wrote: > Matthew Seaman <freebsd-questions@infracaninophile.co.uk> wrote: >=20 >>>>> ls -1 | xargs rm >> >>>> but be aware that that wont work for filenames with spaces. >> >> True. Can't do that using ls to generate the list of filenames as >> there is no option to generate a null-separated list amongst ls's >> multitudinous collection. >=20 > It can, however, be done indirectly :) >=20 > $ ls -1 | tr '\012' '\000' | xargs -0 rm Until you run into someone who creates filenames with newlines in them...= Well, actually in that case, ls(1) would usually mangle the name: $ touch 'a > file name with > new lines in it' $ ls a* a?file name with?new lines in it Since it uses '?' to replace any "unprintable" character, that's not bullet proof either. Of course, ls(1) has an option for that: $ ls -B a* a\012file name with\012new lines in it Actually, it has two options for that: $ ls -b a* a\nfile name with\nnew lines in it and before Randal picks me up again on the differences between ls(1) outputting to the terminal rather than into anything else... $ ls a* > ls.out $ hd ls.out=09 00000000 61 0a 66 69 6c 65 20 6e 61 6d 65 20 77 69 74 68 |a.file name with| 00000010 0a 6e 65 77 20 6c 69 6e 65 73 20 69 6e 20 69 74 |.new lines in it| * 00000020 No mangling occurs if you pipe the output into another process. Even so, the conclusion must be that ls(1) is not the best choice for generating a list of file names *for programmatic input* if you have to deal with the full gamut of possible names. find(1) is much better in that case. ls(1) is great for displaying to people in pretty much all circumstances, and it should only be used programmatically if you can /guarantee/ you aren't going run into any of the tricky cases. Cheers, Matthew --=20 Dr Matthew J Seaman MA, D.Phil. PGP: http://www.infracaninophile.co.uk/pgpkey --------------enig342F3E1EDFC2B38E58C3EB8B Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.16 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk82MdwACgkQ8Mjk52CukIxEGwCdGYoel/OAcoSw8kO81kbT7KJF QMsAoIL6o42zTNaNGkYJ+2iqNPWOv9ov =UT6I -----END PGP SIGNATURE----- --------------enig342F3E1EDFC2B38E58C3EB8B--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4F3631D6.3070109>