OSXで、ディレクトリとそのサブディレクトリ内のすべてのPDFファイルを検索します。
私はサブディレクトリにいくつかのPDFがあることを知っています。これは多くの結果を生み出します:
ls myfolder/pdfs/*.pdf
私のすべてのグーグルは私が欲しいと示唆していますls -R
、ただしこれは結果を生成しません:
ls -R *.pdf
何が悪いのですか?
私はこの方法でいくつかの結果を見つけることができます:
ls -R | grep pdf
しかし、私はファイルへのこの完全なパスを見ることができません。これはあまり役に立ちません。
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
シェルオプションの設定に対応します(ただし、この単一のグロビングパターン)、ドットはパターンを通常のファイルのみに一致させます(つまり、ディレクトリなどには一致しません)。
bash
ターミナルにあるネイティブmacOS
シェルで、拡張globオプションglobstar
を有効にして、ネストされたサブディレクトリで再帰的なglob一致を有効にします。
shopt -s globstar nullglob
ls **/*.pdf
nullglob
は、どのファイルとも一致しないファイル名パターンが、それ自体ではなくnull文字列に展開されるのを防ぎます。 globstar
では、パターン**
ファイル名展開コンテキストで使用すると、すべてのファイルと0個以上のディレクトリおよびサブディレクトリに一致します。
現在のシェルでシェルオプションを設定しないようにして少し安全にするために、代わりにサブシェルで設定できます。
( shopt -s globstar nullglob; ls **/*.pdf )
試す
find . -name \*.pdf -print
これは次のようなpdfをリストするはずです
myfolder/foo/doc1.pdf
myfolder/bar/foo/doc2.pdf
ご了承ください *
in *.pdf
は、開始ディレクトリにPDFがある場合はエスケープする必要があります。