How do I select a field/column from the output of `ls -l`?
My goal is deceptively simple (at least to me). I wish to take the output of ls -l
or ls -lh
and select just one field.
I am looking for this to be as bulletproof as possible, by which I mean, assume that filenames can have a variable number of spaces, not everything in the field has the same length, etc.
Bonus points for having a script that will take the name of the the field (or even just a field number), and then return the contents of the field.
I want to turn
into:
Try ls -l | awk '{print $7}'
.
awk
selects columns so it's perfect for this task.
Never parse ls. Use GNU find
. Or if portability isn't important, stat(1)
.
find . -maxdepth 1 -printf '%Td\n'
For reading data other than lists of filenames line-by-line and splitting into fields, see: BashFAQ/001
There are no methods to reliably read a newline-delimited list of filenames that make sense under most circumstances.