ls
奇妙な動作が発生し、中国語のファイル名を理解できません。私はSIPが有効になっています(コアOSの変更はありません)、MacPortsがインストールされており、アメリカ英語がデフォルトの言語であるmacOS 13.6.1を実行しています。
まず、空のフォルダでこの小さなスクリプトを実行してテストファイルを作成します。
import random
random.seed(42)
for i in range(30):
n = random.randrange(3, 8)
fn = "".join(random.choice("一二三") for _ in range(n))
open(fn, "w")
これにより、文字1、2、3のランダムな組み合わせで名前が付けられた30個のファイルが残ります。
次に、ls -l
Macで実行しました(マンページによるとバージョン「macOS 13.5」)。
% ls -l
total 8
-rw-r--r--@ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
ファイルの並べ替えを消去ファイル名の長さ別しかし、そうでなければソートされていないls
すべての漢字がまったく同じように同じ長さです。
LANG
に設定されen_US.UTF-8
、LC_*
変数は設定されていないため、英語のソートの問題かもしれません。
% LANG=zh_CN.utf-8 ls -l
total 8
-rw-r--r--@ 1 brx staff 164 11 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 11 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 11 25 02:41 二三二一二二一
はい、おそらくこれはls
Macに組み込まれている不都合なものかもしれません。 (MacPortsで)GNU Coreutilsを試してみましょうls (GNU coreutils) 9.4
。
% gls -l
total 4
-rw-r--r--+ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
% LANG=zh_CN.utf-8 gls -l
总计 4
-rw-r--r--+ 1 brx staff 164 1125日 02:41 test.py
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一一三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二二三二一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 1125日 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 1125日 02:41 二三二一二二一
とは別にユーモラスにGNU Coreutilsの日付表示が破損しており、変更されていません。動作しているように見える唯一のものは次のとおりですC.utf-8
。
% LANG=C.utf-8 ls -l
total 8
-rw-r--r--@ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ???????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ?????????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 ??????????????????
% LANG=C.utf-8 gls -l
total 4
-rw-r--r--+ 1 brx staff 164 Nov 25 02:41 test.py
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一一三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二一一一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一三二三三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二一三二三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 一二三二一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一一二二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三一三一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三一三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三三三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二一三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二三一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 三二二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一一三三二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一三三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二一二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三三二三二二
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二一二二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二三二三二三
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二一一二一
-rw-r--r--+ 1 brx staff 0 Nov 25 02:41 二二三二一二
ここで何が起こっているのでしょうか?私のMacの地域設定が壊れていますか?
編集する: 説明予想されるls
処置:文字を適切なソート順にソートしたいと思います。適切な順序には、Unicodeコードポイント(1、3、2)、数字またはストローク番号の順序(1、2、3)、ピンインシーケンス(2、3)があります。 、1つは「2、3、1」に対応します)。
コメントに答えるためのいくつかの追加情報(en_US.UTF-8
ロケール):
sort
ORgsort
またはNOTにパイプすると、順序は変更されません-u
。私のシステムには実際にC.utf-8ロケールはありません。これは、Cロケールと同じ出力を得る理由を説明します。バイト値でソートされ、各バイトは
?
。expr '一二三' '<' '三一二'
、expr '一二三' '>' '三一二'
は、macos または GNU を使用するexpr '一二三' = '三一二'
かどうかにかかわらず、それぞれ 1、0、0 を返します。expr
expr
perl -MPOSIX -le 'print strcoll@ARGV' -- '一' '二'
出力がmacosまたはMacPortsに付属しているか-140
どうか。perl
perl -MPOSIX -le 'print strcoll@ARGV' -- '一一' '二'
出力19968
これらの文字のエンコーディングは
$'\344\270\200\344\270\200\344\270\211'
localeに一一三
報告されているものと似ているため、UTF-8で正しくエンコードされているようです。gls
C
出力は
perl -MPOSIX -le 'print unpack "H*", strxfrm$_ for @ARGV' -- '一' '一一' '二'
次のとおりです303034323030303030346c32 30303432303034323030303030346c3230346c32 303034323030303030346e3e
の出力は
perl -MPOSIX -le 'print "$_\t" . unpack "H*", strxfrm$_ for <*>'
次のとおりです。一一三一 303034323030343230303432303034323030303030346c3230346c3230346c3b30346c32 一一三 3030343230303432303034323030303030346c3230346c3230346c3b 一三三二三一 3030343230303432303034323030343230303432303034323030303030346c3230346c3b30346c3b30346e3e30346c3b30346c32 一三二一一一一 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3230346c3230346c3230346c32 一三二一一一二 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3230346c3230346c3230346e3e 一三二一 303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c32 一三二三三三一 303034323030343230303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3b30346c3b30346c3b30346c32 一三二三三 30303432303034323030343230303432303034323030303030346c3230346c3b30346e3e30346c3b30346c3b 一三二 3030343230303432303034323030303030346c3230346c3b30346e3e 一二一一三三 3030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3230346c3230346c3b30346c3b 一二一三二三三 303034323030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3230346c3b30346e3e30346c3b30346c3b 一二三二一一 3030343230303432303034323030343230303432303034323030303030346c3230346e3e30346c3b30346e3e30346c3230346c32 三一一二二二三 303034323030343230303432303034323030343230303432303034323030303030346c3b30346c3230346c3230346e3e30346e3e30346e3e30346c3b 三一三一一 30303432303034323030343230303432303034323030303030346c3b30346c3230346c3b30346c3230346c32 三三一三 303034323030343230303432303034323030303030346c3b30346c3b30346c3230346c3b 三三一 3030343230303432303034323030303030346c3b30346c3b30346c32 三三三三 303034323030343230303432303034323030303030346c3b30346c3b30346c3b30346c3b 三二一三二 30303432303034323030343230303432303034323030303030346c3b30346e3e30346c3230346c3b30346e3e 三二三一 303034323030343230303432303034323030303030346c3b30346e3e30346c3b30346c32 三二二三 303034323030343230303432303034323030303030346c3b30346e3e30346e3e30346c3b 二一一一 303034323030343230303432303034323030303030346e3e30346c3230346c3230346c32 二一一三三二 3030343230303432303034323030343230303432303034323030303030346e3e30346c3230346c3230346c3b30346c3b30346e3e 二一三三 303034323030343230303432303034323030303030346e3e30346c3230346c3b30346c3b 二一二 3030343230303432303034323030303030346e3e30346c3230346e3e 二三三二三二二 303034323030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346c3b30346e3e30346c3b30346e3e30346e3e 二三二一二二一 303034323030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346e3e30346c3230346e3e30346e3e30346c32 二三二三二三 3030343230303432303034323030343230303432303034323030303030346e3e30346c3b30346e3e30346c3b30346e3e30346c3b 二二一一二一 3030343230303432303034323030343230303432303034323030303030346e3e30346e3e30346c3230346c3230346e3e30346c32 二二三二一二 3030343230303432303034323030343230303432303034323030303030346e3e30346e3e30346c3b30346e3e30346c3230346e3e test.py 303033563030333830303355303033563030314d303033523030335f30303030303033563030333830303355303033563030314d303033523030335f
ベストアンサー1
同じ長さの文字列にこれらの文字の相対的な順序があるように見えるため、まったく同じとは見なされません。そうではありません