From owner-freebsd-questions@FreeBSD.ORG Wed Apr 25 18:58:38 2007 Return-Path: X-Original-To: freebsd-questions@freebsd.org Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F1DF816A402 for ; Wed, 25 Apr 2007 18:58:38 +0000 (UTC) (envelope-from kline@tao.thought.org) Received: from tao.thought.org (dsl231-043-140.sea1.dsl.speakeasy.net [216.231.43.140]) by mx1.freebsd.org (Postfix) with ESMTP id 6ACB113C480 for ; Wed, 25 Apr 2007 18:58:38 +0000 (UTC) (envelope-from kline@tao.thought.org) Received: from tao.thought.org (localhost [127.0.0.1]) by tao.thought.org (8.13.8/8.13.1) with ESMTP id l3PJ0ixo071106; Wed, 25 Apr 2007 12:00:44 -0700 (PDT) (envelope-from kline@tao.thought.org) Received: (from kline@localhost) by tao.thought.org (8.13.8/8.13.1/Submit) id l3PJ0gxp071105; Wed, 25 Apr 2007 12:00:42 -0700 (PDT) (envelope-from kline) Date: Wed, 25 Apr 2007 12:00:42 -0700 From: Gary Kline To: Matthew Seaman Message-ID: <20070425190042.GA70940@thought.org> References: <20070425072914.GA65634@thought.org> <462F0824.5000107@infracaninophile.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <462F0824.5000107@infracaninophile.co.uk> User-Agent: Mutt/1.4.2.2i X-Organization: Thought Unlimited. Public service Unix since 1986. X-Of_Interest: Observing twenty years of service to the Unix community Cc: Gary Kline , FreeBSD Mailing List Subject: Re: first of misc questions.... X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Apr 2007 18:58:39 -0000 On Wed, Apr 25, 2007 at 08:49:56AM +0100, Matthew Seaman wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: RIPEMD160 > > Gary Kline wrote: > > Guys, > > > > This is an awk-type question. Hopefully a one-liner. If I > > need to use #!/usr/bin/awk and a BEGIN/END (or whatever it is), > > that's okay... > > > > I want to do an ls -l in a /home/kline/ and find and > > edit files that are dated (let's say) Apr 19 or Mar 26. This > > works to print $9 the filenames. > > > > ls -l| awk '{if ($6 == "Apr" && $7 == 19 || $6 == "Mar" && $7 > > == 26 ) print $9}' > > > > What's the final part to get awk to vi $9? Or another pipe and > > xargs and "vi"? Nothing simple works, so thanks for any > > clues! > > > > xargs(1) is your friend. > > Simply arrange for your awk script to print out the names of all the > files you have selected to edit, then pipe the result into xargs. > Like so: > > ls -l| awk '{if ($6 == "Apr" && $7 == 19 || $6 == "Mar" && $7 == 26 ) > print $9}' | xargs vi Doing a pipe thru "xargs vi" is the first thing that failed--with: ex/vi: Vi's standard input and output must be a terminal whereas ls -l| awk '{if ($6 == "Apr" && $7 == 19 || $6 == "Mar" && $7 == 26 ) print $9}' printed a slew of files to stdout. > > This does assume that the file names you are using do not contain > spaces, quote marks, brackets or other characters of syntactical > significance to the shell. In that case you could use something like > this: > > find . -type f \( -mtime 6 -o -mtime 29 \) -print0 | xargs -0 vi No, no non-ASCII characters in the filenames. I'll try the -0 and see if that gets rid of the "must be a terminal" blurb... ph 11:47 [5133] ls -l| awk '{if ($6 == "Apr" && $7 == 19 || $6 == "Mar" && $7 == 26 ) print $9}' | xargs -0 vi ex/vi: Files with newlines in the name are unrecoverable ex/vi: Modifications not recoverable if the session fails ex/vi: Vi's standard input and output must be a terminal Ah, so vi sees "filename\n" ... perhaps. [?] > > where find's '-print0' and the '-0' flag to xargs make the commands > produce and consume respectively a null separated list of filenames. > > Unfortunately with find(1) there doesn't seem to be a way of expressing > an absolute date / time -- all you can do is the time difference between > now and when you want (which defaults to 'number of days' but can be set > to use various other time units. I can think of a couple of ways of > calculating that, but personally I'd find it cleaner to just roll the > whole thing into a small perl script which identified the files in > question and forked off an instance of vi(1) to do the editing. > You're probably right about the script. There are at least dozens of files around ... they could be /bin/mv'd or cp'd to a tmp and then run thru vi. --Or?? thanks much, Matthew. appreciate it, gary > Cheers, > > Matthew > > - -- > Dr Matthew J Seaman MA, D.Phil. Flat 3 > 7 Priory Courtyard > PGP: http://www.infracaninophile.co.uk/pgpkey Ramsgate > Kent, CT11 9PW, UK > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2.0.3 (FreeBSD) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFGLwgk3jDkPpsZ+VYRAxaaAJ9H4q3vD4qqBo+FijEs+PqmaR0kaQCgidpA > kXOmJIpsODutFhLIvIoJpEE= > =fNoc > -----END PGP SIGNATURE----- -- Gary Kline kline@thought.org www.thought.org Public Service Unix