
私はディレクトリを作成します
mkdir site_{1..44}
。並べ替えたい
site_1
site_2
site_3
site_4
...
site_44
私はコマンドを実行して
ls | sort -h
います
site_1
site_10
site_11
site_12
site_13
site_14
site_15
site_16
site_17
site_18
site_19
site_2
site_20
site_21
site_22
site_23
site_24
site_25
site_26
site_27
site_28
site_29
site_3
site_30
site_31
site_32
site_33
site_34
site_35
site_36
site_37
site_38
site_39
site_4
site_40
site_41
site_42
site_43
site_44
site_5
site_6
site_7
site_8
site_9
私はどこで間違っていますか?
答え1
GNUの使用ls
:
ls -1 -v
ls --format=single-column --sort=version
GNUの使用sort
(そしてファイル名に改行文字が含まれていないと仮定):
ls | sort -V
ls | sort --version-sort
を使用すると、zsh
glob修飾子を使用して数字でglobをソートすることもできますn
。
print -rC1 -- *(Nn)
(ここでullglob修飾子が使用されるため、N
一致するファイルがない場合(*
パターンで隠されていないファイルがない場合)、エラーを発生させる代わりに何も印刷しません。)
に渡された場合は、セルフソートを無効にするように指示するls
必要があります(/ GNUを使用)。ls
-U
--sort=none
ls
ls -ldU -- *(n)
N
(引数が渡されない場合は何もリストされls
ないため、ここでは使用されません.
。)
Make it the default を使用することもできますset -o numericglobsort
。
しかし、より良いアプローチは、ファイル名にゼロパディングを使用して、数字と語彙を等しく整列させることです。
mkdir site_{01..44} # zsh, bash, yash -o braceexpand
mkdir site_{1..44%02d} # ksh93
GNUsort -h
自体がソートされています。人が読めるサイズAsdu -h
またはls -sh
example が表示されている場所では123456789
example が で表されるため、118M
ここでは役に立ちません。
あなたの場合はsite_1
…見えるものから始めないでください人が読めるサイズ、両方ともゼロとして扱われ、等しくソートされます。ただし、最後の比較では、行全体を語彙的に比較して、接続を切断する語彙ソートが行われます。
ディレクトリ名が指定されていて、後で見つけたサイズに基づいてソートしたい場合でも、site_314
そのディレクトリsite_1.1K
がどこにあるかを教えてください。site_0.9M
_
sort
人が読めるサイズsort -t_ -k1,1 -k2h
最初の語彙の前の部分を最初にソートしてから、_
次の部分をソートして_
次のように解釈するのと同じです。人が読めるサイズh
ey仕様に準拠したロゴが含まれていますk
。