Unixの「ls」を名前でソート


127

lsリストを名前でソートできますか?


10
引数なしで名前で並べ替えていない場合は、lsが別のエイリアスになっているかどうかを確認するか、存在するエイリアスを削除するフルパスを使用して単に呼び出します。
tvanfosson 2009年

gnu-coreutils lsはデフォルトでソートします。どのシステムを使用していますか(他の人が尋ねたように)
Nick Fortescue、

タイプではなく名前でソートすることを求めていますか(つまり、最初にディレクトリ、次にファイル)??
curtisk 2009年

大文字は小文字の前に来るので、ファイルZはファイルaの前に来ます...どうすれば修正できますか?
ArtOfWarfare 2013年

マニュアルページに「個別に、辞書式順序でソートされています」と書かれています。ファイルは、最初の文字に応じてソートされています。数値[0..9]とUPPER文字[A..Z]とLoweの文字を[A..Z]
GürolCanbek

回答:


131

私のlsはデフォルトで名前でソートします。何を見てるの?

man ls 状態:

List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.


ls-c1指定された場合、並べ替えを行いません。それを行う方法はありますか?(--sort=name動作しないようです)
dhc

1
それは真実ではありません。with ls -la、i see:.bashrc - can - .config - Downloads - .local - tmp、sort be nameは次のようになります:.bashrc - .config - .local - Downloads - can - tmp
12431234123412341234123

1
私は100.jpgが10.jpgより前に来ると言います。「0」が「」の前にある場合、私は推測します。しかし、それでも直感的ではありません
chiliNUT

「b」の前に「M」が表示されます。混乱しています。待って、大文字化は重要ですか?
Daniel Springer、

105

簡単なものとして、lssortを組み合わせることができます。ファイル名のリストのみの場合:
ls -1 | ソート

それらを逆の順序で並べ替えるには:
ls -1 | ソート-r


3
このようなファイルをソートする方法はありますか:ls | sort -n 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; 2.10.2より前の2.10.15をご覧ください。
BBK 2014

私はPidionデバイスでいくつかのAndroid開発を行っています。lsは自動的にソートされないため、これは非常に役に立ちました。唯一の問題は、何らかの理由でソフトリンクをソートしているがファイルをソートしていないように見えることです
Mitch

Macでは、2番目のコマンドはに短縮できるようls -1rです。
Ash Ryan Arnwine

4
@BBK sort -Vはバージョン番号でソートするため、.. 2.10.2;が得られます。2.10.15; .. from man sort .. --sort = WORDは、WORDに従ってソートします:一般数値-g、人間数値-h、月-M、数値-n、ランダム-R、バージョン-V
モッシュ

35

lscoreutils行うロケール認識したがって、デフォルトでソート、および(例えば、いくつかの場合には驚くべき結果を生み出すことができる%fooとの間にソートしますbarquuxLANG=en_US)。ASCII順のソートが必要な場合は、

LANG=C ls

LANGソート動作に影響を与えます。この投稿は私を大きく助けます!
yurenchen 2016年

これも私にとってはうまくいきました。これについて詳しく説明してもらえますか?なぜ違うのですか?
Kostas

1
この線量?は機能しますが、出力がターミナルである場合、すべての非ASCII文字に対して出力されます(lsの悪い機能は、ターミナルに出力されるかどうかをチェックし、パイピング時に機能します)。これをcatへのパイプで「修正」し、C.UTF-8ロケールを使用し(システムがサポートしている場合)、-bフラグを使用できます。さらに良いことに、使用しないls`、すべてでより有効に利用する
12431234123412341234123

これにより、ファイル名の一部にハイフン(-)が含まれ、一部にダッシュ(-)が含まれることが問題であることがわかりました。lsenダッシュの前にハイフンをソートします。
ジャミーマハビエ

17

* nixツールの優れた点は、それらを組み合わせることができることです。

ls -l | sort -k9,9

の出力は次のls -lようになります

-rw-rw-r-- 1 luckydonald luckydonald  532 Feb 21  2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt

したがって、ファイル名である9,99まで列を並べ替えます9。停止する場所を指定する必要があります。この場合は同じ列です。列はで始まります1

また、大文字と小文字を無視したい場合は--ignore-case、sortコマンドに追加してください。


1
どういう-k9,9意味ですか?
ラッキードナルド2017

判明したのは、列9を同じ列に並べ替えること9です。通常のls出力は次のようになります:drwx------ 8 999 user 4.0K Feb 5 2017 file.txtしたがって、列9はファイル名です。大文字と小文字を区別しない場合は、--ignore-caseon sortを使用します。
ラッキードナルド2017

8

注意:「a」は「Z」の後に来る:

$ touch A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
これは常に正しいとは限りません。これが真実ではない状況は正確にはわかりませんが、Ubuntu 12.04を実行している私のマシンでは、lsの出力はアルファベット順にソートされます(大文字と小文字は区別されません)。
Patrick James McDougle 2013年

良いキャッチ!...それはASCIIコードに基づいて、それを注文しているよう..アッパーケースアルファベットは小文字が続いているようだ
ケントPawar

1
私のMacOSが最初の数字、大文字、下線、小文字の順にソートされていることに気付きました。大文字と小文字が区別されないのはおかしいです。一方、私のDebianは大文字と小文字を区別しますが、タイがない限り小文字を区別せずに並べ替え、小文字が優先されます。例:ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

私もMACを使っています。A、Z、a、zタイプのソートが表示されてがっかりしました。私はA、a、Z、aを好むのでここにいます。あなたの先端をありがとう。normalここで解決策を試します。
nyxee 2017

8

数値文字列のみが異なるファイルは、この番号の前に区切り文字を付けるという条件でソートできます。

この場合、次の構文を使用できます。

ls -x1 file | sort -t'<char>' -n -k2

例:

ls -1 TRA*log | sort -t'_' -n -k2

TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log

4

manページから(bash lsの場合):

-cftuSUXも--sortもない場合は、エントリをアルファベット順にソートします。


3
「bash ls」はありません。「どちらのls」を実行する
Norbert Hartl

@Norbert:あなたは正しいですが、which lsbashに組み込みのlsがあったとしても成功します。むしろ、builtin lsbashで行うと、エラーが発生します。
ピアノサウルス2009年

4
@Norbert:which常にパスを返します。type lsシェルが何を考えてlsいるか(組み込み、関数、実行可能ファイル)を判別するために使用します。
エフェミント2009年

3

lsユーティリティは、IEEE規格1003.1-2001(に従わなければならないPOSIX.1と述べ):

22027:現在のロケールの照合シーケンスに従って、ディレクトリオペランドと非ディレクトリオペランドを別々にソートします。

26027:デフォルトでは、形式は指定されていません、出力はシンボル名でアルファベット順にソートされます。

  • ライブラリまたはオブジェクト名(-Aが指定されている場合)
  • シンボル名
  • シンボルタイプ
  • シンボルの値
  • シンボルに関連付けられているサイズ(該当する場合)


2

ls -Xは、lsをより便利なデフォルトにエイリアスしている場合に備えて、その目的で機能します。


0
In Debian Jessie, this works nice:

ls -lah --group-directories-first

# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha

# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.