Как можно изменить выходные данные 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.
Я сделал сценарий оболочки для того же. Он заботится о случаях, когда имена файлов имеют пробелы или любые другие специальные символы.
#! /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]
Попробуйте:
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;}'
Питон хорош для этого:
# 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 )
Нам даже не нужно конвертировать вывод как Tab Delimited. Пространство между столбцами достаточно просто.
Выполните команду ls -l
в терминале, как обычно, и скопируйте содержимое, которое вы хотите вставить в электронную таблицу.
Далее откройте программу электронных таблиц (в моем случае LibreOffice Calc) и нажмите Ctrl kbd> + V kbd>, чтобы вставить содержимое вашего буфера обмена.
Откроется Мастер импорта текста. Убедитесь, что вы поставили галочку рядом с Space
и нажмите Ok kbd>. Вы можете посмотреть предварительный просмотр в нижней панели.