Can ls -l be made to separate fields with tabs rather than spaces to make the output useful in a spreadsheet?
How can the output of ls -l
be modified to separate fields using tabs instead of spaces? I want to paste the output into a spreadsheet; the padding with a variable number of spaces makes it difficult to do so. To illustrate:
drwxr-xr-x 2 root root 4096 Sep 26 11:43 wpa_supplicant -rw-r----- 1 root dialout 66 Sep 26 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 Oct 8 08:21 X11 drwxr-xr-x 12 root root 4096 Feb 18 23:31 xdg drwxr-xr-x 2 root root 4096 Jan 31 06:11 xml drwxr-xr-x 2 root root 4096 Nov 22 07:26 xul-ext -rw-r--r-- 1 root root 349 Jan 13 2012 zsh_command_not_found
In the excerpt from ls -l /etc
shown above, rows 1, 2 and 3 have a single digit in column 2 whereas row 4 has two. That means the alignment is achieved by using two spaces for separating columns 1 and 2 in rows 1-3, but just one space in row 4.
Try:
ls -l | awk -v OFS="\t" '$1=$1'
Or, if your filenames have spaces:
ls -l | awk '{print $1,"\t",$2,"\t",$3,"\t",$4,"\t",$5,"\t",$6,"\t",$7,"\t",$8,"\t",$9,$10,$11,$12,$13,$14,$15;}'
I've made a shell script for the same. It takes care of the cases when the filenames have spaces or any other special characters.
#! /bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") for file in $(ls) do stat --printf="%A\t%h\t%U\t%G\t%s\t" $file mod_epoch=$(stat --format="%Y" $file) mod_month=$(date -d @$mod_epoch +"%b") mod_day=$(date -d @$mod_epoch +"%d") mod_time=$(date -d @$mod_epoch +"%H:%M") printf "%s\t%s\t%s\t%s\n" $mod_month $mod_day $mod_time $file done IFS=$SAVEIFS
- Save it to a file, say
ls_tab.sh
- Make it executable:
chmod +x ls_tab.sh
- Run it:
./ls_tab.sh
Note: This can be done by parsing the output of ls
, however the reason why it should not be done is given here.
We do not even need to convert the output as Tab Delimited. Space between columns is just fine enough.
Run your ls -l
command in terminal as you normally do and copy the contents you wish to be pasted in a Spreadsheet.
Next, open your Spreadsheet program (LibreOffice Calc in my case) and press Ctrl + V to paste the contents of your clipboard.
The Text Import Wizard would pop up. Make sure you put a checkmark beside Space
and press Ok. You can watch the preview in the lower pane.