web-dev-qa-db-ja.com

OSXでファイルを再帰的にリストしますか?

OSXで、ディレクトリとそのサブディレクトリ内のすべてのPDFファイルを検索します。

私はサブディレクトリにいくつかのPDFがあることを知っています。これは多くの結果を生み出します:

ls myfolder/pdfs/*.pdf

私のすべてのグーグルは私が欲しいと示唆していますls -R、ただしこれは結果を生成しません:

ls -R *.pdf

何が悪いのですか?

私はこの方法でいくつかの結果を見つけることができます:

ls -R | grep pdf

しかし、私はファイルへのこの完全なパスを見ることができません。これはあまり役に立ちません。

2
Richard

ls -R *.pdfは、*.pdfに一致するものに対してlsを再帰的に呼び出します(現在のディレクトリに*.pdfに一致するものが何もない場合、結果は得られません。それがディレクトリの場合にのみ再帰します)。 ls -R | grep pdfは、正規表現pdfと一致するls -R結果のすべてを表示しますが、これは必要なものではありません。

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

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

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

zshシェル(最近macOSのデフォルトシェルになりました)を使用:

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

これにより、.pdfで終わる名前を持つディレクトリmyfolder内またはその下のすべての通常ファイルのパス名が1つの列に出力されます。一致には非表示の名前が含まれ、一致がない場合は空の行が出力されます。 glob修飾子のNおよびDは、nullglobシェルのdotglobおよびbashシェルオプションの設定に対応します(ただし、この単一のグロビングパターン)、ドットはパターンを通常のファイルのみに一致させます(つまり、ディレクトリなどには一致しません)。

2
Kusalananda

bashターミナルにあるネイティブmacOSシェルで、拡張globオプションglobstarを有効にして、ネストされたサブディレクトリで再帰的なglob一致を有効にします。

shopt -s globstar nullglob
ls **/*.pdf

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

現在のシェルでシェルオプションを設定しないようにして少し安全にするために、代わりにサブシェルで設定できます。

( shopt -s globstar nullglob; ls **/*.pdf )
2
Inian

試す

find . -name \*.pdf -print

これは次のようなpdfをリストするはずです

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

ご了承ください * in *.pdfは、開始ディレクトリにPDFがある場合はエスケープする必要があります。

1
Archemar