web-dev-qa-db-ja.com

Ubuntuでファイル名にUnicode絵文字を表示する

ファイル名に絵文字を使用してコマンドラインでアクセスしたいのですが、lsで機能させることができないようです。奇妙なことに、他のプログラムにパイプすると、絵文字が正しく表示されます。

$ ls
?  tmp  我很好,谢谢

$ ls --color
?  tmp  我很好,谢谢

$ ls | cat
????
tmp
我很好,谢谢

$ ls | xargs
???? tmp 我很好,谢谢

$ ls | column
????               tmp             我很好,谢谢

$ ls | awk '{print $1}'
????
tmp
我很好,谢谢

私はGNU coreutils8.23を使用しています。

これが私のロケール情報です:

[LOCAL] vagrant@vagrant ~$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:
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=

何がこの振る舞いを引き起こすのか、そして私がどのようにプレーンな 'ol lsls | xargsこの状況では?

1
bschlueter

答えはlsのマニュアルページにあります。

       --show-control-chars
          show non graphic characters as-is (default unless program is 'ls' and output is a terminal)

lsコマンドが特別に扱われる理由を理解するために、さらに詳しく調べる必要がありますが、その引数には????が表示されます。 lsを使用する場合。

1
bschlueter