Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

awk '{print $9}' the last ls -l column including any spaces in the file name

Tags:

bash

awk

How would I get awk to output the whole file name in ls -l if some of the files have spaces in them. Usually, I can run this command:

ls -l | awk '{print $9}'

That doesn't work if the files have spaces in them. Is it possible to print $9, $10, $11 etc as well somehow?

like image 528
Mint Avatar asked Sep 19 '09 05:09

Mint


1 Answers

A better solution: Don't attempt to parse ls output in the first place.

The official wiki of the irc.freenode.org #bash channel has an explanation of why this is a Bad Idea, and what alternate approaches you can take instead: http://mywiki.wooledge.org/ParsingLs

Use of find, stat and similar tools will provide the functionality you're looking for without the pitfalls (not all of which are obvious -- some occur only when moving to platforms with different ls implementations).

For your specific example, I'm guessing that you're trying to find only files (and not directories) in your current directory; your current implementation using ls -l is buggy, as it excludes files which have +t or setuid permissions. The Right Way to implement this would be the following:

find . -maxdepth 1 -type f -printf '%f\n'
like image 168
Charles Duffy Avatar answered Sep 20 '22 14:09

Charles Duffy