名前に3文字以上を含むすべてのPDFを見つけます。

名前に3文字以上を含むすべてのPDFを見つけます。

名前(拡張子を除く)が3より大きいPDFファイルを探したいです。

$ find ~ -iregex ".{3,}/.pdf"

何も返さないけど

$ find ~ -iregex ".+/.pdf"

働く

このバリエーションを有効にするには{3,}

ベストアンサー1

ここでは、標準のワイルドカードを使用する方が簡単です。

find ~ -name '*???.[pP][dD][fF]'

またはいくつかの実装を介してfind(サポートされている実装-regexもサポート-iname):

find ~ -iname '*???.pdf'

代わりに、文字数に関係なく利用可能な場所3に戻すことをお勧めします(参照-iregex@Stephen Kittの返信)または以下を使用またはglobすることができzshますksh93

  • zsh:

    set -o extendedglob # best in ~/.zshrc
    printf '%s\n' ~/**/?(#c3,).(#i)pdf(D)
    

    (D)隠しファイルと次の隠しディレクトリにあるファイルを考えてみてくださいfind

    • (#cx,y)zsh正規表現に対応するワイルドカードです。{x,y}
    • (#i)大文字と小文字を区別しない場合
    • ?単一文字標準ワイルドカード (例: regexp .)
    • **/:すべてのレベルサブディレクトリ(レベル0を含む)
  • ksh93:

    FIGNORE='@(.|..)' # to consider hidden files
    set -o globstar
    printf '%s\n' **/{3,}(?).~(i:pdf)
    
    • @(x|y):regexpに似た拡張kshワイルドカード演算子です(x|y)
    • FIGNORE:グローバルに無視されるファイルを制御する特殊変数。一度設定すると、隠しファイルは通常無視されますが、まだ存在するディレクトリエントリを無視しようとします...
    • {x,y}(z)ksh93regexpと同じですz{x,y}
    • ~(i:...):大文字と小文字を区別しない一致です。

Globはソートされたリストを取得し(glob修飾子を使用してfindソートを無効にするか、他のソート基準を使用できます)、ファイル名に有効な形式を形成しないバイトシーケンスを含む場合でも、いくつかの追加の利点がありますあります。文字操作(UTF-8文字セットを使用するロケールでは、この方法ではaを非文字として報告できないため、正規表現、ワイルドカード、またはGNUと一致しません。zshoNfind$'St\xE9phane Chazelas - CV.pdf\xE9.?*find

おすすめ記事