回答:
オプション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
)、すべてを印刷します。