スポンサーリンク

findを使ったファイル検索

下記のようなディレクトリとファイル構成だった時に、

 $ tree -a
.
├── .svn
│   └── svnfile.txt
├── dir1
│   ├── .hiddenFile
│   └── file.txt
├── dir2
└── file0.txt

3 directories, 4 files

まずは、findを使ってカレントディレクトリ以下の全てのファイルを出力してみます。
検索ディレクトリにカレントディレクトリを指定して、-typefオプションでfを指定します。

 $ find . -type f

実行すると、下記のようにカレントディレクトリ以下の全てのファイルが出力されます。
 $ find . -type f
./.svn/svnfile.txt
./dir1/.hiddenFile
./dir1/file.txt
./file0.txt

スポンサーリンク

findの-pruneオプションで、.svnディレクトリ以下を除外してファイル検索

下記のように-pruneオプションをつけると、指定したディレクトリ以下が検索されなくなります。
さらに、-oオプションでファイル検索を指定することで、指定したディレクトリ以外のファイルが検索されます。
(-printを最後に付けないと、.svnディレクトリも出力されてしまいます。)

 $ find . -type d -name ".svn" -prune -o -type f -print

同様に、下記のようなディレクトリとファイル構成だったときに、

 $ tree -a
.
├── .svn
│   └── svnfile.txt
├── dir1
│   ├── .hiddenFile
│   └── file.txt
├── dir2
└── file0.txt

3 directories, 4 files

実行すると、下記のように.svnディレクトリ以外のファイルが出力されています。

 $ find . -type d -name ".svn" -prune -o -type f -print
./dir1/.hiddenFile
./dir1/file.txt
./file0.txt

.svnディレクトリ以外のファイル数をカウントする

.svnディレクトリを除外して、ファイル数をカウントしたい場合には、パイプでつないでwc -lをつけるだけです。

 $ find . -type d -name ".svn" -prune -o -type f -print | wc -l

スポンサーリンク