Bash Alias ​​для LS, который печатает несколько столбцов по «типу»

StackOverflow https://stackoverflow.com/questions/5347462

  •  27-10-2019
  •  | 
  •  

Вопрос

Я перечисляю только файловые базовые имена с такой командой LS, от которого я получил здесь:

ls --color -1 . | tr '\n' '\0' | xargs -0 -n 1 basename

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

Таким образом, первая (и главная) «задача» - это печатать несколько столбцов различной длины.

У вас есть какие -либо предложения, какие команды я должен использовать для написания этого скрипта? Должен ли я переключиться на find? Или я должен просто написать сценарий в Perl?

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

Это было полезно?

Решение

#!/bin/bash

width=20

awk -F':' '

/directory/{
  d[i++]=$1
  next
}

/executable/{
  e[j++]=$1
  next
}

{
  f[k++]=$1
}

END{
  a[1]=i;a[2]=j;a[3]=k
  asort(a)
  printf("%-*.*s | \t%-*.*s | \t%-*.*s\n", w,w,"Directories", w,w,"Executables", w,w,"Files")
  print "------------------------------------------------------------------------"
  for (i=0;i<a[3];i++)
    printf("%-*.*s |\t%-*.*s |\t%-*.*s\n", w,w,d[i], w,w,e[i], w,w,f[i])
}' w=$width < <(find . -exec file {} +)

Образец вывода ЗДЕСЬ

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top