Можно ли использовать ls -l для разделения полей с помощью табуляций, а не пробелов, чтобы сделать вывод полезным в электронной таблице?

Как можно изменить выходные данные ls -l, чтобы разделить поля с помощью табуляции вместо пробелов? Я хочу вставить вывод в электронную таблицу; заполнение переменным числом пробелов затрудняет это. Для иллюстрации:

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

В отрывке из ls -l /etc, показанном выше, строки 1, 2 и 3 имеют одну цифру в столбце 2, тогда как строка 4 имеет две. Это означает, что выравнивание достигается использованием двух пробелов для разделения столбцов 1 и 2 в строках 1-3, но только одним пробелом в ряду 4.

10
задан 26 March 2013 в 19:56

4 ответа

Я сделал сценарий оболочки для того же. Он заботится о случаях, когда имена файлов имеют пробелы или любые другие специальные символы.

#! /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
  • Сохраните его в файл, скажем, ls_tab.sh
  • Сделайте его исполняемым:
chmod +x ls_tab.sh
  • Запустите его:
./ls_tab.sh

Примечание: Это можно сделать, анализируя вывод ls, однако причина, по которой это не должно быть сделано, приведена здесь . [ 1110]

0
ответ дан 26 March 2013 в 19:56

Попробуйте:

ls -l | awk -v OFS="\t" '$1=$1'

Или, если в именах файлов есть пробелы:

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;}'
0
ответ дан 26 March 2013 в 19:56

Питон хорош для этого:

# python
import os

os.system( 'ls -lR --time-style=full-iso /home/jw > ls_dump.txt')

folder = ''

for line in open('ls_dump.txt', 'r'):

    inrec = line.split()

    if inrec == []:
        continue

    if inrec[0].startswith('total'):
        continue

    if inrec[0].endswith(':'):
        folder = inrec[0].replace(':','')
        continue

    outline = folder + '\t' + '\t'.join(inrec[0:8]) +'\t'+ ' '.join(inrec[8:]) 

    print( outline )
0
ответ дан 26 March 2013 в 19:56

Нам даже не нужно конвертировать вывод как Tab Delimited. Пространство между столбцами достаточно просто.

Выполните команду ls -l в терминале, как обычно, и скопируйте содержимое, которое вы хотите вставить в электронную таблицу.

terminal command

Далее откройте программу электронных таблиц (в моем случае LibreOffice Calc) и нажмите Ctrl + V , чтобы вставить содержимое вашего буфера обмена.

Откроется Мастер импорта текста. Убедитесь, что вы поставили галочку рядом с Space и нажмите Ok . Вы можете посмотреть предварительный просмотр в нижней панели.

Libo Text Import

0
ответ дан 26 March 2013 в 19:56

Другие вопросы по тегам:

Похожие вопросы: