拡張ASCII文字を含むファイル名の検索

拡張ASCII文字を含むファイル名の検索

拡張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

おすすめ記事