ワイルドカードの応答文字の変更( '**')

ワイルドカードの応答文字の変更( '**')

ワイルドカード演算子を実行しました。

**

ディレクトリリストから

ls -d "$PWD/"**/

しかし、Enterキーを押して...待って...待って...何千もの行を作成した後、すぐに答えを吐き出すことがわかりました。

出力を一度に1つのグローバル変数の代わりに一度に1行ずつ生成することはできますか?これがグローバル設定なのか、OS設定なのか、それともプロファイル設定なのか気になります。

(興味深いことに、この質問は外部ディスプレイ(コンピュータモニタ)とコンピュータ内部の処理との境界を超えています。

この質問は私の場所を変えると考えることができます。観察者モニターの外からコンピュータワークスペースの中のどこかまで私が行けないところ、私の観察者行けませんが、逆説的にできる行くだけでそこに行くには... 非物質空間にあるので、私たちはその空間やその空間の見かけの動作を決して確信できません。

私は、これらの異なるシェルを使用して、コンピュータ機能のこれらのスペースの内部を表示できるようにする他のシェルがあるかどうかについて、別のスペースで別の質問をします。しかし、それは範囲を超えているので、ここではこれ以上詳しく説明しません。この質問の範囲の。 )

答え1

ファイル名生成とも呼ばれるglobのポイントは、パターンと一致するファイルパスの(ソートされた)リストを生成してコマンドに渡すことです。

もちろん、リストはコマンドに渡される前に作成する必要があります。なぜなら、リスト全体がシステムコールの引数として渡されるからですexecve()

コマンド引数にglobを渡す必要はなく、結果を配列に割り当てることもできます。

files=( **/*.txt )

またはループで使用してくださいfor

for file in **/*.txt; do...

ただし、今回もリストが最初に整理され、ソートされ、処理されます。

ファイルのみを印刷するには、glob修飾子の一部として**/シェルと共にzshシェル(元の1992年)を使用できます。print良い:

**/*(N^e['print -r -- $REPLY'])

+funcname代わりに、ヘルパー関数と修飾子を使用してくださいe[code]

p() { print -r -- $REPLY; false; }

それから:

**/*(N+p)

またはそれ以降set -o globstarshort

**(N+p)

または:

**(/N+p)

ファイル形式の場合目次ただ。

リストはソートされません。

もちろん、ls -ld --代わりに使用することはできますが、組み込みですが、print -r --そうではなく、各ファイルに対して新しいプロセスで別々に実行するのに費用がかかります。printlsls

ファイルからより多くの情報を得るには、zshの組み込みstat機能を使用することをお勧めします(zmodload zsh/stat最初にロード)。


1 ここでは、glob 修飾子を使用します/。これにより、すべてのディレクトリに**/追加されたディレクトリへのシンボリックリンクも取得されます。/

答え2

これはワイルドカードfindではなく仕事のように聞こえます。ls

find "${PWD}" -type d

技術的・哲学的な後半は扱いません。

関連情報