質問

私はこのような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