OSXでファイルを再帰的に一覧表示しますか?

OSXでファイルを再帰的に一覧表示しますか?

OSXのディレクトリとサブディレクトリにあるすべてのPDFファイルを見つけたいです。

たとえば、これは多くの結果を生成するため、サブディレクトリにいくつかのPDFがあることを知っています。

ls myfolder/pdfs/*.pdf

私のすべてのインターネット検索は私が望むものを示していますが、ls -R結果はありません。

ls -R *.pdf

私は何が間違っていましたか?

次のような結果があります。

ls -R | grep pdf

ただし、ファイルのフルパスを表示できないため、あまり役に立ちません。

答え1

ls -R *.pdfls一致するコンテンツは再帰的に呼び出されます*.pdf(現在のディレクトリに一致するものがない場合は*.pdf結果が得られず、存在する場合はディレクトリがディレクトリの場合にのみその結果に再帰されます)。目的の結果ではなく、正規表現に一致するすべてを結果にls -R | grep pdf表示します。ls -Rpdf

これがあなたに必要なものです:

find myfolder -type f -name '*.pdf'

これにより、ファイル名がパターンと一致するディレクトリ-type f内または下にあるすべての一般ファイル()のパス名が提供されます。シェルからモードを保護するには、モードを引用する必要があります。myfolder*.pdf

zshシェル(最近のmacOSのデフォルトシェル)を使用する:

print -rC1 myfolder/**/*.pdf(.ND)

myfolderこれにより、名前で終わるディレクトリ内または下のすべての一般ファイルのパス名が単一の列に印刷されます。.pdf一致には隠された名前が含まれます。 glob修飾子のandはシェルのandシェルオプション設定に対応します(ただし、この単一のワイルドNカードパターンのみ)、ドットはパターンが通常のファイル(ディレクトリなどではない)とのみ一致するようにします。Dnullglobdotglobbash

答え2

努力する

find . -name \*.pdf -print

これにはpdfまたは同様のものをリストする必要があります。

myfolder/foo/doc1.pdf
myfolder/bar/foo/doc2.pdf

起動ディレクトリにpdfがある場合は、*inをエスケープする必要があります。*.pdf

答え3

bashターミナルのデフォルトシェル(バージョン4以降)でmacOS拡張globオプションを有効にして、ネストされたサブglobstarディレクトリで再帰的なglobマッチを有効にします。

shopt -s globstar nullglob
printf '%s\n' **/*.pdf

nullglobどのファイルとも一致しないファイル名パターンが、それ自体ではなく空の文字列に拡張されるのを防ぎます。を使用すると、globstarファイル名拡張コンテキストで使用されるパターンは、**すべてのファイルとゼロ個以上のディレクトリとサブディレクトリと一致します。

安全のため、現在のシェルでシェルオプションを設定するのではなく、サブシェルで設定できます。

( shopt -s globstar nullglob; printf '%s\n' **/*.pdf ; )

関連情報