Псевдоним Bash для ls, который печатает несколько столбцов по типу - PullRequest
2 голосов
/ 18 марта 2011

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

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

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

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

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

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

1 Ответ

4 голосов
/ 18 марта 2011
#!/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 {} +)

Пример вывода ЗДЕСЬ

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

...