OSXのディレクトリとサブディレクトリにあるすべてのPDFファイルを見つけたいです。
たとえば、これは多くの結果を生成するため、サブディレクトリにいくつかのPDFがあることを知っています。
ls myfolder/pdfs/*.pdf
私のすべてのインターネット検索は私が望むものを示していますが、ls -R
結果はありません。
ls -R *.pdf
私は何が間違っていましたか?
次のような結果があります。
ls -R | grep pdf
ただし、ファイルのフルパスを表示できないため、あまり役に立ちません。
答え1
ls -R *.pdf
ls
一致するコンテンツは再帰的に呼び出されます*.pdf
(現在のディレクトリに一致するものがない場合は*.pdf
結果が得られず、存在する場合はディレクトリがディレクトリの場合にのみその結果に再帰されます)。目的の結果ではなく、正規表現に一致するすべてを結果にls -R | grep pdf
表示します。ls -R
pdf
これがあなたに必要なものです:
find myfolder -type f -name '*.pdf'
これにより、ファイル名がパターンと一致するディレクトリ-type f
内または下にあるすべての一般ファイル()のパス名が提供されます。シェルからモードを保護するには、モードを引用する必要があります。myfolder
*.pdf
zsh
シェル(最近のmacOSのデフォルトシェル)を使用する:
print -rC1 myfolder/**/*.pdf(.ND)
myfolder
これにより、名前で終わるディレクトリ内または下のすべての一般ファイルのパス名が単一の列に印刷されます。.pdf
一致には隠された名前が含まれます。 glob修飾子のandはシェルのandシェルオプション設定に対応します(ただし、この単一のワイルドN
カードパターンのみ)、ドットはパターンが通常のファイル(ディレクトリなどではない)とのみ一致するようにします。D
nullglob
dotglob
bash
答え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 ; )