私はその反対をしたい:
find . -name "*2013*"
名前に文字列 "2013"が含まれていない現在のディレクトリ内のすべてのファイルを見つけます。どうすればいいですか?
ベストアンサー1
簡単に:
find . ! -name '*2013*'
追加すると、! -type d
その種類のファイルを除外することもできます。目次(そのまま.
)または-type f
そのまま含める定期的な他のすべての種類のファイル(ディレクトリ、fifo、シンボリックリンク、デバイス、ソケット...)を除くファイル。
*
ただし、ゼロ個以上のシーケンスを一致させるように注意してください。数値。したがって、現在のロケールで有効な文字で完全にデコードできないコンテンツの2013
前後のファイル名を報告できます。2013
文字を複数バイトにエンコードできるロケール(UTF-8など)にあり、ファイル名が別のエンコーディングにある場合、これが発生する可能性があります。たとえば、少なくともUTF-8ロケールおよびGNUシステムでは、ファイルがStéphane2013
iso8859-15文字セット(0xe9バイト)でエンコードされている場合、システムはファイルを報告します。é
ファイル名がロケールの文字セットでエンコードされていることを確認するのが最善ですが、これが保証できない場合は、回避策はfind
Cロケールで実行することです。
LC_ALL=C find . ! -name '*2013*'
2013
デフォルト名だけでなく、パスの任意の場所からファイルを除外するには、次のようにします。
LC_ALL=C find . ! -path '*2013*'
これはより効率的です:
LC_ALL=C find . -name '*2013*' -prune -o -print
つまり、名前が含まれるfind
ディレクトリ2013
(prune
ツリーの該当部分)にあえて入れないように指示されます。なぜならパスに2013
。
1 何百ものマルチバイト文字があります2
。