`ls` 一致パターンからディレクトリを除外する

`ls` 一致パターンからディレクトリを除外する

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

ls */*.png

うまくいきます。

ls (^one)*/*.png

標準出力を返しません。どのように実装できますか?

目を離してパイプを接続してespeak今聞くことができるのは標準出力だけです。

答え1

オプション1- 次の使用のみls
拡張bashワイルドカードを開く(shopt -s extglob)、次のことができます。

ls !(one*)/*.png


オプション2- 結合lsgrep:

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

関連情報