zshでグローブをフィルタリングする方法

zshでグローブをフィルタリングする方法

デフォルトでは、zshでglobを使用してリストを作成できます。わかりましたら、そのリストをフィルタリングしたい場合が多いのですが、あえてそうすべきか不思議に思っています。

zshでリストをフィルタリングする方法はありますか?当然のことではないかと思いますが、今日は精神的に収穫量が少ない日です。

答え1

zshがこの機能を備えた唯一のシェルなので、これは奇妙な質問です。知られているグローバル予選。いつものように、マニュアルはやや簡潔で、例が不足しています。これZsh愛好家このページにはいくつかの例があります。Google検索zsh "glob qualifiers"いくつかのブログ投稿とチュートリアルが登場しました。検索も可能です"glob qualifier"このウェブサイトから

基本:glob修飾子はglobの末尾の括弧内にあります。最も便利なのは、特定のファイル形式のみを選択するための句読点です。

echo *(/)      # directories
echo *(.)      # regular files
echo *(@)      # symbolic links
echo *(-/)     # directories and symbolic links to directories

サイズ、日付、所有権などのメタデータをフィルタリングする別の修飾子があります。

# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)

Glob修飾子は一致順序を制御し、一致数を制限することもできます。

echo *(Om[1,10])     # The 10 oldest files

修飾子を持つ関数を呼び出して任意のフィルタを設定できます(トリッキーな引用符が正しい場合は、+コードを修飾子にインライン化することもできます)。e

残念ながら、これらすべては世界中でのみ適用されます。このようにファイル名のリストを作成するには、ワイルドカードを使用するときにフィルタリングする必要があります。すでに作成したリストをフィルタリングしたい場合は、まったく異なる構文があります。パラメータ拡張フラグ、単純なテキストフィルタリング("${(@)ARRAY:#PATTERN}")のみを実行できます。

関連情報