ZSH: `ls *(.)` は通常のファイルだけをリストしますが、 `ls *(/)` はディレクトリだけをリストしません。

ZSH: `ls *(.)` は通常のファイルだけをリストしますが、 `ls *(/)` はディレクトリだけをリストしません。

ZSHのワイルドカードを正しく使用しているかどうかはわかりませんが、ls *(/)下のディレクトリだけを一覧表示すると思いましたが、pwdそうではありません。各ディレクトリの下のすべてのファイルを再帰的に一覧表示しますpwd(私はこれ便利なzshのヒントのリスト)

現在のパスの下のディレクトリを具体的にリストするための正しいワイルドカード文字は何ですか?

答え1

私は問題がzsh globbingではなく、ディレクトリ引数がls与えられたときにディレクトリの内容を一覧表示するデフォルトの動作だと思います。

一度試してください。

ls -d -- <your-glob-here>

地球をテストする最良の方法は次のとおりです。

printf '%s\n' <glob>

または

print -rC1 -- <glob>

答え2

これを実装する別の方法は

 print *(/)

または

 echo *(/)

アップデート1

少しもっと@Stéphane Chazelasが指摘したように、正しいバージョンは次のとおりです。

print -rl -- *(/) 

または

echo -E - *(/)

ファイル名にスペース(-l)、エスケープシーケンス(-r/-E)、および先行ハイフン(-/-)を書き留めます。

アップデート2

しかし、でも正しいバージョンは、print -rN結果をnull値で区切ってファイル名の改行(Linuxでは許可、Windowsでは許可されていません)をさらに処理することです。たとえば、次のようになります。

print -rN -- **/*(/) |xargs -0 -n10 chmod g+s

setguid ビットを再帰的に設定します。つまり、以外のディレクトリアドレスをオプションで指定しますchmod -R g+s

アップデート3

巨大なツリーの場合、コマンドラインの長さの制限によりファイルの一部のみが処理され、残りは自動的に残ります。次のコマンドはこの状況を処理します。

find . -type d -print0 |xargs -0 -n10 chmod g+s

答え3

現在のディレクトリのすべてのディレクトリタイプを一覧表示する

ls -d -- *(/)
ls -d *(/)

それ以外の場合

ls -d */**(/)

すべてのディレクトリを再帰的に一覧表示します。

関連情報