2012-02-08 7 views
10

スクリプト内ではなく、ターミナル内のフォルダやサブフォルダ内のすべてのPDFファイルを検索しようとしています。私はまた、Linuxにとってかなり新しいので、明らかに何かを見逃したり、私の特定の問題を診断するのに欠かせないことを謝っています。lsを使用して特定のパターンに一致するすべてのファイルを検索する

私はbash 4.1.5(1)-release(i486-pc-linux-gnu)を使用しています。グロブとextglobの式についてgoogleについて調べています。現在のフォルダ./でパターン*.pdfに一致するファイルがないので、これはしかし、何も見つからない

$ ls **.pdf 

です。

ls: cannot access **.pdf: No such file or directory 

は、PDFファイルは、(ごとサブフォルダ1-深いで特に)、そのうちのいくつかは、私がチェックすることにより、深い見ることができます1と5の間のサブフォルダに、別の場所にあります。***として読みたいように見えます

$ ls */*.pdf 

したがって、lsは正常に動作しているようです。そのマニュアルは、上記のいずれの場合でも問題を解決しない-Rフラグを使用してlsと呼んでいる私が見ることができるすべてのものがわかるので、あまり有用ではないようです。

extglobパターンを使用してみました(shoptでオンにしてください)。深さ1のファイルはls */*?(.)pdfで見ることができますが、PDFがあるサブディレクトリ内でさえ、ls .*(/*)pdfまたはls .*(/*).pdfで見ることはできません。

**パターンがすべての人で機能しないことが、別の場所で(gitリポジトリの.gitignoreファイルを参照して)読んだことがあります。

これは私に影響を与える可能性がありますか、それをどのように修正することができますか(スーパーユーザー権限なし)。これ(または何らかの関連する問題)もextglobの機能に影響を与えますか?

答えて

13

のためにあなたは

012を見つける検討する必要があります
find . -name '*.pdf' -exec ls -l {} \; 

または

find . -name '*.pdf' -ls 

。あなたの現在の作業ディレクトリです。 glob機能には4.0以上のbashが付属しています。グロブ拡張子は他の言葉で移植可能ではありません。

5

globライブラリから拡張機能を使用するには、オプションextglobおよびglobstarが必要です。下記のシェルオプション(shopt)を使用してオンにします。

globstar**パターンはbashマニュアルの説明どおりに動作します)を使用するには、bash 4でアクティブにする必要があります。0+)

shopt -s globstar 

とし、?(ab)*(ab)その完全な効果のような、より「機能」の正規表現型の式を有効にするには、もう一度オプションをオフにするには

shopt -s extglob 

を使用し、-uフラグを指定代わりにsの、eaxample

shopt -u globstar 
関連する問題