Unix `mv`を使ってU + 20の代わりにUnicodeスペースを持つファイルの名前を変更するには?

Unix `mv`を使ってU + 20の代わりにUnicodeスペースを持つファイルの名前を変更するには?
$ ls cn*
cn blah blah.txt
$ ls cn\ *
ls: cannot access 'cn *': No such file or directory
$ ls cn*|hexdump -C
00000000  63 6e e2 80 85 62 6c 61  68 c2 a0 62 6c 61 68 2e  |cn...blah..blah.|
00000010  74 78 74 0a                                       |txt.|
$ mv cn blah blah.txt 'cn blah blah.txt'
mv: 'cn blah blah.txt' and 'cn blah blah.txt' are the same file

注:0xe28085はU + 2005(FOUR-PER-EM SPACE)のUTF-8エンコーディング、0xC2A0はU + A0(NO-break SPACE)のUTF-8エンコーディングです。最初のパラメータをコピーして貼り付けmvます'。ファイル名の周りにsは必要ありません。いいえファイル名の一般スペース(U+20)。

通常のスペース(U + 20など)を使用してファイル名を入力できるようにファイル名を変更するにはどうすればよいですか?

答え1

そしてzsh

autoload zmv
zmv '*' $'${f//[\u2005\ua0]/ }'

U + 2005は一般的にまたはとしてblank分類されるため、space次のようにすることもできます。

zmv '*' '${f//[[:blank:]]/ }'

または:

zmv '*' '${f//[[:space:]]/ }'

現在の作業ディレクトリに隠されていないファイル名のU + 0020スペースに分類されるか、U + 0020スペースを使用しているすべての文字を置き換えますblankspace

U + 00A0ははるかにまれであるため、GNUシステムを含む複数のシステムでは区切り文字/区切り文字として使用されないため、U + 00A0として分類されません。

関連情報