パターンに一致する `ls`の1つのディレクトリを除外する


13

1つをls除いて、.png内部にファイルがあるディレクトリ(再帰性は必要ありませんが、さらに便利ですが)にしようとしています。1つのディレクトリを除外

ls */*.png

正常に動作します。

ls (^one)*/*.png

標準出力を返しません。どうすれば達成できますか?

私は盲目で、にパイプしているespeakので、今のところ標準出力しか聞こえません。


どのシェルを使用していますか?あなたのパターンはzshパターンのように見えますが、除外しないので有用なパターンではありませんがone(正しいパターンは^one/*.png)、すべてを印刷します。
ジル 'SO-悪であるのをやめる'

回答:


16

オプション1-ちょうど使用ls
拡張bashグロビングをオン(shopt -s extglob)にすると、次のことができます。

ls !(one*)/*.png


オプション2-組み合わせlsおよびgrep

あなたは組み合わせることができlsgrep -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/*"
G-Manは「Reinstate Monica」と言います

@ G-Manあなたは絶対に正しい。上記で編集。
トクセファ

それはまだ一致しません./phone/handset.pngか?
G-Manは「Reinstate Monica」と言います

@ G-Man .pngというディレクトリのsのマッチングの何が問題になっていphoneますか?私たちはただ除外しようとしていると思いましたoneか?
トクセファ

1
まあ、あなたはに関連してそれを使用して-notいるのでfind、というディレクトリ内のファイルを除外することを意味しますphone
G-Manは「Reinstate Monica」と言います

6

zshの、置くsetopt extended_globあなたに~/.zshrc。次に、ワイルドカードパターン ^oneを使用して、というディレクトリを除外できますone

ls ^one/*.png

サブディレクトリに再帰する場合は**/、再帰的なグロビングに使用します。oneトップレベルで呼び出されるディレクトリとトップレベルのディレクトリを除外するには:

ls ^one/**/*.png

というサブディレクトリ内のファイルを除外し、そのサブディレクトリ内のファイルを除外するoneには:

ls **/^one/*.png

one任意のレベルで呼び出されるサブディレクトリの下のファイルを除外するに#は、否定を囲む演算子で繰り返しパターンを使用します。

ls (^one/)#/*.png
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.