web-dev-qa-db-ja.com

「ls」に最初にドットファイルを表示させるにはどうすればよいですか?

どこかでlsコマンドを台無しにしましたが、実行するとこの順序になります

$ ls -AhHl --color=auto
-rwxr-xr-x 1 clang clang  640 Mar  1 02:46 Apple-touch-icon-precomposed.png
-rwxr-xr-x 1 clang clang  784 Jul 12 02:54 crossdomain.xml
-rwxr-xr-x 1 clang clang 1.2K Mar  1 02:46 favicon.ico
drwxr-xr-x 8 clang clang 4.0K Jul 12 23:50 .git
-rw-r--r-- 1 clang clang   17 Feb 29 19:48 .gitignore
-rwxr-xr-x 1 clang clang 1.4K Jul 12 02:54 humans.txt

Lsがdotfilesを無視し、代わりに最初の文字で並べ替えるために何をしましたか?

localeの出力:

$ locale
LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
46
clang1234

追加してみてください

export LC_COLLATE="C"

dotfilesで、またはLC_ALL割り当て:

export LC_ALL="C"

これは、文字レベルでの並べ替えの方法を制御します。デフォルトではドットファイルをインラインで並べ替えますが、sortリストのドットファイルを最初に作成します。

ただし、これにより、すべてのロケール対応ユーティリティでの実際のロケールのサポートが基本的に停止することに注意してください。


さらに進むには、 GNU Coreutilsマニュアル (私の強調)を引用します。

非POSIXロケールを使用する場合(たとえば、LC_ALLからen_US)の場合、sortは、慣れている方法とは異なる方法でソートされた出力を生成することがあります。

その場合は、LC_ALL環境変数をCに変更します。 LC_COLLATEには2つの問題があります。まず、LC_ALLも設定されています。第二に、LC_CTYPE(またはLANG、もしLC_CTYPE is unset)が互換性のない値に設定されています。たとえば、LC_CTYPEja_JP.PCK だが LC_COLLATEen_US.UTF-8

50
slhck

実際に必要としないシステム全体の変更を回避するには、.bashrcにエイリアスを追加することで、現在のユーザーに対するlsの動作方法のみを変更できます。

alias ll='LC_COLLATE=C ls -alF'

これは最初にドットファイルを並べ替え、キリル文字のような「一般的でない」文字セットを適切に処理(表示および並べ替え)できるようにします。並べ替えで大文字と小文字が区別される唯一の原因。

ソース: http://ubuntuforums.org/showthread.php?t=81675

39
Andrey Loskutov

Ls(1)のマンページには以下がリストされています。

-vテキスト内の(バージョン)番号の自然な種類

これにより、ピリオドのソート方法が変わり、ドットファイルが最初にグループ化されます。私が持っています:

alias ls='ls -vAF'
alias ll='ls -l'

私の〜/ .bashrcで。

7
Vince Valenti

設定

LC_ALL="C.UTF-8"

私にとってはうまくいきます-ウムラウトと "ls -la"は最初にドットファイルをリストします。

7
Faroul

壁から外れたアイデア

免責事項:これはあなたのほとんどにとってやり過ぎになるでしょう。しかし、私は1995年以来これを行っており、自分の世界を自分の望むとおりに作るスキルを持っています。だから、私はなぜですか?

ls、特に-rtreverse modified timeでソートされる)でさまざまなソート方法を使用するのが本当に好きです。それで、私は何かおかしなことを試し、awkを使用して並べ替えを行うことにしました。

# save as ~/.ls.awk
# inpsired by http://superuser.com/questions/448291/how-can-i-make-ls-show-dotfiles-first

{
    if($1 == "total"){
        print $0
        next
    }
    # may need to adjust $9 to match your name column
    if(match($9, /^(\033\[[0-9]*m)*\./)) # optionally look past xterm highlighting like: ^[[34m
        df[++dd] = $0
    else
        nf[++nn] = $0
}
END{
    while (++d in df)
        print df[d]
    while (++n in nf)
        print nf[n]
}

Bashエイリアスを定義する代わりに、bash関数を定義します(エイリアスは最後に引数を追加できるだけですが、関数はどこでもそれらを使用できます)

ll(){ CLICOLOR_FORCE=1 ls -lhA $* | awk -f ~/.ls.awk; }

結果を確認するには

サンプルファイルをいくつか作成してみましょう。

for n in 4 .4 3 .3 2 .2 1 .1; do touch $n; sleep 1; done

プレーンlsの使用

$ ls -lA
total 8
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
$ ls -lArt

total 8
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1

Awkでフィルタリングする関数を使用する

$ ll
total 8
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4

$ ll -rt
total 8
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1

これの私の実装をここで見ることができます https://github.com/RichardBronosky/dotfiles/commit/6170c0a9

これについて最も重要なのは、ls出力を調整するためのフレームワークであることです。そのawkフィルターを使用して、好きなことができます。あなたはそれをディレクトリ、次にドットファイル、そして他のすべてにしたいかもしれません。 xtermの色を処理する方法がわかれば、それほど難しくありません。それは完全にあなた次第です。

1
Bruno Bronosky