回答:
オプション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のみがこれを再帰的に行います。
findコマンドは、-path "*/one/*"またはと言う必要はありませんか-path "./one/*"?
./phone/handset.pngか?
.pngというディレクトリのsのマッチングの何が問題になっていphoneますか?私たちはただ除外しようとしていると思いましたoneか?
-notいるのでfind、というディレクトリ内のファイルを除外することを意味しますphone。
でzshの、置くsetopt extended_globあなたに~/.zshrc。次に、ワイルドカードパターン ^oneを使用して、というディレクトリを除外できますone。
ls ^one/*.png
サブディレクトリに再帰する場合は**/、再帰的なグロビングに使用します。oneトップレベルで呼び出されるディレクトリとトップレベルのディレクトリを除外するには:
ls ^one/**/*.png
というサブディレクトリ内のファイルを除外し、そのサブディレクトリ内のファイルを除外するoneには:
ls **/^one/*.png
one任意のレベルで呼び出されるサブディレクトリの下のファイルを除外するに#は、否定を囲む演算子で繰り返しパターンを使用します。
ls (^one/)#/*.png
one(正しいパターンは^one/*.png)、すべてを印刷します。