Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Apr 2007 12:00:42 -0700
From:      Gary Kline <kline@tao.thought.org>
To:        Matthew Seaman <m.seaman@infracaninophile.co.uk>
Cc:        Gary Kline <kline@tao.thought.org>, FreeBSD Mailing List <freebsd-questions@freebsd.org>
Subject:   Re: first of misc questions....
Message-ID:  <20070425190042.GA70940@thought.org>
In-Reply-To: <462F0824.5000107@infracaninophile.co.uk>
References:  <20070425072914.GA65634@thought.org> <462F0824.5000107@infracaninophile.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
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/<directory> 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 <what> "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 <tao> [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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070425190042.GA70940>