名前で ls リストをソートできますか?
私の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とsortを組み合わせることができます。ファイル名のリストのみ:
ls -1 | sort
逆順に並べ替えるには:
ls -1 | sort -r
ls
from coreutils
は、デフォルトでlocale-awareソートを実行するため、場合によっては驚くべき結果を生成することがあります(たとえば、%foo
はbar
およびquux
in LANG=en_US
)。 ASCIIbeticalソートが必要な場合は、使用します
LANG=C ls
* 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,9
を使用して、列9
を列9
までソートし、ファイル名にします。停止する場所を指定する必要があります。この場合は同じ列です。列は1
で始まります。
また、大文字/小文字を無視する場合は、--ignore-case
をsortコマンドに追加します。
注意:「a」は「Z」の後に来る:
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
数値文字列だけが異なるファイルは、この番号で区切り文字の前にあるという条件でソートできます。
この場合、次の構文を使用できます。
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
Manページから(bash lsの場合):
-cftuSUXも--sortもない場合、エントリをアルファベット順にソートします。
.bashrc
ファイルのエイリアスを確認してください。
ls
ユーティリティは、IEEE Std 1003.1-2001( POSIX.1
)に準拠する必要があります。
22027:現在のロケールの照合シーケンスに従って、ディレクトリオペランドと非ディレクトリオペランドを別々にソートします。
26027:デフォルトでは、フォーマットは指定されていませんが、出力はシンボル名でアルファベット順にソートされます:
- ライブラリ名またはオブジェクト名、-Aが指定されている場合
- シンボル名
- シンボルタイプ
- シンボルの値
- シンボルに関連付けられているサイズ(該当する場合)
ls -Xは、lsをより便利なデフォルトにエイリアスした場合に、その目的で機能します。
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 --