シェルグロブを使用してネストされたディレクトリを識別する方法はありますか?
したがって、dir / dir1 / dir2 / dir3 / dir4 / dir5 / ..があり、それらすべての下にファイルがある場合、すべてのディレクトリの下のすべてのファイルに一致する同等のグロブパターンは、次のようになります。ls -R
Bash 4ではshopt -s globstar
、、、およびzshを使用**/*
して、隠しファイルを除くすべてを含めることができます。shopt -s dotglob
Bash 4またはsetopt dotglob
zshで実行して、隠しファイルを含めることができます。
kshで、それをset -o globstar
有効にします。ドットファイルを暗黙的に含める方法はないと思いますが、うまくいくと思います**/{.[^.],}*
。
特にgit(gitignore、gitattributes、およびファイル名を受け取るコマンド)について:パターンにスラッシュが含まれていない場合、*
ワイルドカードは深く一致します。スラッシュが含まれている場合、 gitはフラグを使用してfnmatchを呼び出しFNM_PATHNAME
、単純なワイルドカードはスラッシュと一致しません。**
深く一致することはサポートされていません。たぶん、この種のディープマッチングは、新しいFNM_STARSTAR
フラグと、glibc、gnulib、およびその他の場所での実装によって、より広くサポートされる可能性があります。
単にリストするのではなく、findによって返されたすべてのファイルを処理したい場合は、それらをxargsにパイプすることができます。
find <directory> -type f | xargs ls
ただし、これは再帰フラグを持たないコマンド専用です。
あなたは試すことができます:
**/*.*
ただし、隠しファイル(ファイルなど.git
)は無視されます。時にはそれは命の恩人です。
バニラBashでこれを行う方法はありませんが、ほとんどのコマンドは、-R
または--recursive
オプションを受け入れて、ディレクトリに降りるように指示します。
ディレクトリまたはそのサブディレクトリ内の任意の場所にあるすべてのファイルを一覧表示するだけの場合は、findを使用できます。
-type f
指定されたディレクトリを持つファイル()を再帰的に検索するには:
find <directory> -type f
ツリーを使用できます。すべてのフォルダが再帰的に表示されます。
tree <path>