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


46

途中でどこかで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がドットファイルを無視し、代わりに最初の文字で順序付けするようにしたのはどうしてですか。

の出力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

回答:


47

追加してみてください

export LC_COLLATE="C"

ドットファイルで、または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)が互換性のない値に設定されている場合、未定義の動作になります。たとえば、あなたは未定義の動作を得ることLC_CTYPEであるja_JP.PCKが、LC_COLLATEですen_US.UTF-8


2
LC_ALL = "C"を設定するとうまくいきました!迅速な対応ありがとうございます
-clang1234

7
LC_ALL = "C"を設定すると、ls外国語(日本語など)のファイル名がユニコードになります????????
-ohho

export LC_ALL="C"ドットファイルに追加すると、すべてのロケール対応ユーティリティで実際のロケールのサポートが事実上失われることに注意してください。一方で、印刷 @ohhoポイントアウトをして改善することができることを問題Faroulの答え、あなたが紹介ソートの問題を:ソートはバイト値によって発生しますが、その仕分け結果としては、()予想外にある大文字と小文字を区別常に場所、および(B)アクセント付き文字。後にすべての非アクセント付きのもの。
mklement0 14年

35

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

alias ll='LC_COLLATE=C ls -alF'

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

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


3
これはここでのベストアンサーです
エンジニアドレリー

綺麗な。システム全体の構成を変更するよりもはるかに優れています(一部のPythonモジュールで問題が発生する可能性があります)。
グイアンブロス

1
これが最も役立つ答えでした。さらに、リストLC_ALLの先頭へのドットファイルのソート/ホイストと互換性のないものが既に設定されている環境では、をオーバーライドしないためlsalias ll='LC_ALL=C ls -alF'代わりに使用LC_COLLATEしますLC_ALL
マティ

8

セッティング

LC_ALL="C.UTF-8"

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


3
最初にドットファイルがリストされますが、大文字で始まるファイル名は小文字で始まるファイル名の前にリストされます。
クノッソス14

1
受け入れられた答えよりも近づいたために+1が、制限を要約すると:並べ替えは大文字と小文字を区別し、外国語の文字は-今では正しく印刷されているがUTF-8- 正しく並べ替えられません。
mklement0 14年

3
C.UTF-8は無効なロケールなので、ロケールはに戻りますC。それでもUTF-8サポートは失われます。実際、LC_ALL=Cほとんどのプログラムはほとんどのマルチバイト文字を正しく表示しますが、LC_ALL=something_invalid一部のプログラムでは正しく表示されないため(「ls」など)、さらに悪化します。
マーティントゥルノイ

@MartinTournoijしかし、StéphaneChazelasGNUシステム(おそらくDebianとLinux全般)について別の言い方をすると、どちらが正しいでしょうか?
ムル

@muruよく分からないけど、ステファンに聞く必要があると思う?私が知っているのは、gist.github.com / Carpetsmoker / ef09b3734b29372939f97107413d7733 – Arch Linux上localeにエラーがあるようです。LC_ALL=C.UTF-8
マーティントゥルノイ

3

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

-vテキスト内の自然な(バージョン)番号の並べ替え

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

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

〜/ .bashrcで。


1

オフザウォールのアイデア

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

私はls、特に-rtr逆の変更された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

.bashrcまたは/ etc / bashrcファイルでこれを試してみてください。

LS_OPTIONS='--color=tty -A -F -X -B -h -v -b -T 0 --group-directories-first';
export LS_OPTIONS;
alias ls='/bin/ls $LS_OPTIONS';

これは、オプションとして "--group-directories-first"をとるlsのやや新しいバージョンを実行していることを前提としています。LSオプションをお好みに合わせて微調整できます。


--group-directories-first「ドットファイルを最初に表示する」とはどう関係しますか?
G-Manは「Reinstate Monica」と言います
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.