拡張ASCII文字(0x80-0xFF)を含むディレクトリツリーですべてのファイル名を見つけたいです。私はこれを行うことができると思います:
find . -regex '.*[\x80-\xFF]+.*'
しかし、それはすべてと一致します。また、標準のaz、AZ、0-9、ハイフン、またはピリオドセットにない文字を含むファイルを見つけようとしました。
find . -regex '.*[^- a-zA-Z0-9]+.*'
明らかに私はここで根本的な側面を誤解しています。
私のツリーのファイルの例:
./file 1/file - 1 - A2.mkv
./file 1/file - 1 - A2.nfo
./tést/tést - 2 - 2.mkv
./français/français - 2 -3.mkv
Ubuntu 20.04ではfind(GNU findutils)4.7.0を使用しています。
ベストアンサー1
$ tree
.
|-- file 1
| |-- file - 1 - A2.mkv
| `-- file - 1 - A2.nfo
|-- français
| `-- français - 2 -3.mkv
`-- tést
`-- tést - 2 - 2.mkv
3 directories, 4 files
$ LC_ALL=C find . -name '*[![:print:]]*'
./tést
./tést/tést - 2 - 2.mkv
./français
./français/français - 2 -3.mkv
これは、コマンドのロケールをfind
標準のPOSIXロケールに設定します。文字print
クラスには、文字クラスalpha
、に属するdigit
文字が含まれ、punct
空白文字も含まれます。これは、テストが-name '*[![:print:]]*'
次のように進行することを意味します。本物次の文字を含むファイル名の場合いいえprint
教室で。
さまざまな空白文字(タブなど)を含む名前を探したくない場合は、テストとして使用してください[![:graph:][:space:]]
(print
および間の唯一の違いはスペース文字を含まないことgraph
です)。graph