Cygwin:パスの保存された大文字を取得する

Cygwin:パスの保存された大文字を取得する

CygwinはWindowsと同様に大文字と小文字を区別します。たとえば、次のようになります。

$ touch ABC; rstr=$(openssl rand -base64 12); echo $rstr; echo $rstr > AbC; cat abc
dGRMOHqqoy0/nc96
dGRMOHqqoy0/nc96

$ ls | grep -i abc
ABC

ファイルまたはディレクトリ名の大文字と小文字は保存されますが、操作するときは無視されます。

ABCAbC選択し、abc同じファイルを選択します。

与えられたファイルパスまたはディレクトリパスの大文字と小文字を取得する安定した方法はありますか?別の名前で保存しますか?grepトリックは非常に迅速に非常に面倒になることができます。

答え1

zshこのextendedglobオプションをオンにすると、次のことができます。

$ set -o extendedglob
$ printf '%s\n' (#i)path/to/file
Path/to/FILE

path/to/fileライブラリと一緒に受け取りました。

存在するksh93

$ printf '%s\n' ~(i)path/to/file
Path/to/FILE

(一致するものがない場合は展開されます。ksh93には対応するアイテムやオプションは~(i)path/to/fileありませんが、一致するものがない場合はnullに拡張するために使用できます。)nomatchfailglob~(Ni)path/to/file

bashオプションがオンの場合は、次のことができます。extglobfailglobnocaseglob

$ shopt -s extglob failglob nocaseglob
$ printf '%s\n' @(path)/@(to)/@(file)
Path/to/FILE

それ以外の場合はextglobこれを行うことができますが、printf '%s\n' [p]ath/[t]o/[f]ile確実に自動化することはより困難です。

(とにかくシェルはと同じことを行います。ls | grep -iつまり、一致するファイルを見つけるにはディレクトリ全体の内容を読む必要がありますgrep -i

答え2

まさにあなたが要求したものではありませんが、あなたが興味を持っているものかもしれません。
覚えていないところに持っていきましたが効果がありました。

大文字と小文字の区別 NTFS

Windowsでは、個々のフォルダまたはボリュームに対して大文字と小文字を区別することはできませんが、システム全体で大文字と小文字を区別することはできます。

レジストリキーの値を変更する必要があります。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\obcaseinsensitive

1から0にシステムを再起動します。

これにより、次のインストールにposix=0変更する必要があります。posix=1/etc/fstab

d:\cyg_pub /pub  NTFS binary,posix=1,nouser 0 0

以来

$ cd /tmp

$ touch Pippo

$ touch PIppo

$ touch PIPpo

$ ls P*
Pippo  PIppo  PIPpo

関連情報