まず反対のことを試します:

まず反対のことを試します:

setfattrフリーテキスト コメントに対応する拡張属性を設定するための、少し便利な形式で単純にラップする短いシェル スクリプトを作成しました。

#!/bin/sh
test "$2" && setfattr -n user.xdg.comment -v "$2" "$1"
getfattr -d -m '^user.xdg.comment$' "$1"

US ASCII コメントを xattrs として保存する場合、これはうまく機能します。ただし、US ASCII 以外の文字を含むコメントを設定しようとすると、Base64 でエンコードされたデータと思われるものが返されます。

$ touch xyz
$ set-comment xyz åäöåä
# file: xyz
user.xdg.comment=0sw6XDpMO2w6XDpA==
$ 

しかし、Base64だけではありません。

$ printf "0sw6XDpMO2w6XDpA==" | \base64 --decode
��:\:L;l:\:@base64: invalid input
$ 

ほとんどの場合、私はただランダムに見えるゴミが返されます。時々、このように、Base64 デコーダーが「無効な入力」を返します。

この文字列は何ですか?元の入力値との関係はどのようなものでしょうか?この場合のgetfattrように、元の入力値に戻すにはどうすればよいのでしょうか?åäöåä

setfattr --version私のシステムでは、 と応答しますsetfattr 2.4.46。Debian Wheezy によってパッケージ化されたバージョンを実行しています。問題になる可能性は低いですが、私は標準の Wheezy カーネルで ZFS On Linux 0.6.3 (0.6.2 でも同じ動作を確認) を実行しています。

答え1

この質問を読んでちょっと興味が湧いたので、ちょっとやってみましょう「法医学」:

まず反対のことを試します:

åäöåäBase64 ではどのようにエンコードされますか?

$ echo åäöåä | base64
w6XDpMO2w6XDpAo=

これは明らかに、あなたが持っている とよく似ています。先頭に0sw6XDpMO2w6XDpA==余分なものがあり、末尾は完全に一致していません。 の末尾の改行( によって自動的に挿入されます) を抑制すると、次のようになります。0såäöåäecho

$ echo -n åäöåä | base64
w6XDpMO2w6XDpA==

これは、先頭をuser.xdg.comment除いてまさに -値です。0s

結論

コメントBase64 でエンコードされ、 というプレフィックスが付けられ0s、他のいくつかの文字列をテストすると、これが確認されます。

例:

$ ./set-comment xyz 日本語
# file: xyz
user.xdg.comment=0s5pel5pys6Kqe

$ base64 -d <<<'5pel5pys6Kqe' ; echo
日本語

( は、; echoの出力がbase64改行で終わらないため、次のプロンプトを混乱させないようにするためのものです。)

しかし...

これは、このような場合 (コメントが ASCII 以外の場合) に、コメントが Base64 でエンコードされ、プレフィックスが付けられることを示しています0s

「本当の」答え

これを行った後、私は man ページをチェックするという素晴らしいアイデアを思いつきました。getfattrそこには、次のようなことが書かれています。

オプションに関して-e en, --encoding=en

値を取得した後、エンコードします。en の有効な値は、「text」、「hex」、および「base64」です。テキスト文字列としてエンコードされた値は二重引用符 (") で囲まれ、16 進数および base64 としてエンコードされた文字列にはそれぞれ 0x と 0 がプレフィックスとして付けられます。

したがって、スクリプトを次のように変更します。

(ファイルコメント設定:)

#!/bin/sh
test "$2" && setfattr -n user.xdg.comment -v "$2" "$1"
getfattr -e text -d -m '^user.xdg.comment$' "$1"

属性は常にテキストとして出力されます。たとえば、次のようになります。

$ ./set-comment xyz åäöåä   # with fixed script
# file: xyz
user.xdg.comment="åäöåä"

ただし、まだいくつかの注意点が残っています...たとえば:

$ ./set-comment xyz 0x414243
# file: xyz
user.xdg.comment="ABC"

そして

$ ./set-comment xyz 0s5pel5pys6Kqe
# file: xyz
user.xdg.comment="日本語"

出力が入力と一致しない。

これらは、議論を「調整」して、setfattr好みの形にすることで修正できます。を参照してくださいman setfattr

関連情報