ファイル名に非ASCII文字をdiffとして印刷するにはどうすればよいですか?

ファイル名に非ASCII文字をdiffとして印刷するにはどうすればよいですか?

ASCII以外の文字を含むディレクトリがあります。diffこれを使用すると、diff出力にutf8文字の代わりにエスケープシーケンスが表示されます。

robert@saaz:~$ mkdir foo föö
robert@saaz:~$ echo 1 > foo/bar
robert@saaz:~$ echo 2 > föö/bar

robert@saaz:~$ diff -r f??
diff -r foo/bar "f\303\266\303\266/bar"
1c1
< 1
---
> 2

私が期待するのはf\303\266\303\266/bardiff出力の最初の行ではありませんföö

私はUbuntu 20.04、diff 3.7を使用しています。

robert@saaz:~$ diff --version
diff (GNU diffutils) 3.7
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.

を使用してディレクトリを表示するとls(消去してもLS_OPTIONS)、予想通りにutf8文字で表示されます。

robert@saaz:~$ LS_OPTIONS=x ls -ld f??
drwxrwxr-x 2 robert robert 4.0K 2020-08-06 17:38 foo
drwxrwxr-x 2 robert robert 4.0K 2020-08-06 17:39 föö

私のロケールはすべてutf8です。

robert@saaz:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en
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=en_US.UTF-8

diffASCII以外の文字を同時に表示する方法は?

答え1

これは GNU diff 実装の問題です。

代わりにUNIX diff実装を使用できますgdiff

UNIX diff コマンドの移植可能なバージョンは schilytools の一部です。以下を確認してください。

/usr/bin/diff -r f??
diff -r foo/a "f\366\366/a"
1c1
< a
---
> b

そして:

/opt/schily/ccs/bin/diff -r f??
diff -r foo/a föö/a
1c1
< a
---
> b

/opt/schily/ccs/bin/diff -version
diff schily-SCCS version 5.09 2020/07/14 (x86_64-unknown-linux-gnu)

ソースコードのダウンロードアドレスは次のとおりです。http://sourceforge.net/projects/schilytools/files/

関連情報