.gitignoreのようなパターンに対応するすべてのファイルを見つける方法

.gitignoreのようなパターンに対応するすべてのファイルを見つける方法

例えば。のようなファイルがあります.myignore。そのファイルには次の文字列があります。

.vs/
*.suo
*.user
*.log

次に、ファイルのパターンに一致するすべてのファイルを見つけたいと思います.myignore

ベストアンサー1

存在するzsh

() {print -rC1 -- ${(u)@}} ${~^${(f)"$(<.gitignore)"}}(ND)

どこ:

  • () {body} argsパラメーターを含む匿名関数呼び出し。
  • print -rC1 -- ${(u)@}関数の本体として列にprint固有の引数を表示します(フラグは重複項目を削除します)。これらのファイル/ディレクトリを削除するには、に置き換えます。r1 Cuuprint -rC1rm -rf
  • "$(<.gitignore)".gitignore末尾の改行文字(存在する場合)を除く内容に展開されます。引用符はIFS分割を防ぐためのものです。
  • ${(f)param}パラメータ拡張を行番号f(改行とも呼ばれる)に分割します。
  • ${~param}結果の単語のワイルドカードを許可します。
  • ${^array}textrcやfishと同じ方法で配列を拡張します。たとえば、が$array含まれている場合は代わりに展開されます。ABAtext BtextA Btext
  • (ND)隠しファイルをスキップせず、一致が失敗したためにエラーが発生しないように修飾子を[N]ullglob追加します。[D]otglob

おすすめ記事