私は1つを除いて内部にファイルがls
あるディレクトリを持っています.png
(特に便利ですが、再帰は必要ありません)。ディレクトリを除外します。
ls */*.png
うまくいきます。
ls (^one)*/*.png
標準出力を返しません。どのように実装できますか?
目を離してパイプを接続してespeak
今聞くことができるのは標準出力だけです。
答え1
オプション1- 次の使用のみls
:
拡張bashワイルドカードを開く(shopt -s extglob
)、次のことができます。
ls !(one*)/*.png
オプション2- 結合ls
とgrep
:
ls
組み合わせることができます。grep -v
- 例えば
ls */*.png | grep -v "one/"
オプション3- (最高のIMO)しかし、以下をfind
使用しないでくださいls
:
すべてのサブディレクトリを再帰的に検索するには、次のコマンドを使用します。find
find . -type f -name "*.png" -not -path "*/one/*"
上記の単一のコード行はすべて、一致するパスを.png
フィルタリングしながらファイルを含むディレクトリを一覧表示しますone/
。オプション3のみがこの操作を繰り返し実行します。
答え2
存在する扱いにくい置くsetopt extended_glob
あなたの~/.zshrc
。その後利用できますワイルドカードパターン ^one
名前付きディレクトリを除外しますone
。
ls ^one/*.png
サブディレクトリに再帰的に移動するには、**/
再帰的ワイルドカードを使用します。最上位ディレクトリone
と最上位ディレクトリから呼び出されたディレクトリを除外するには、次の手順を実行します。
ls ^one/**/*.png
名前付きサブディレクトリーのファイルを除外し、one
そのサブディレクトリーを除外するには、次のようにします。
ls **/^one/*.png
すべてのレベルで呼び出されたサブディレクトリの下のファイルを除外するには、one
否定演算子で反復パターンを使用します。#
ls (^one/)#/*.png