#author("2017-01-24T12:26:26+09:00","","")
#author("2017-01-24T12:26:59+09:00","","")
#navi(../)
* findで検索条件に拡張子を指定する方法 [#f9824587]
findコマンドでファイル一覧を取得し指定した拡張子のファイル一覧を抽出したい場合の使用例を記します。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 関連記事 [#r3b6f09e]
-[[findで検索したファイルを削除したい>逆引きUNIXコマンド/findで検索したファイルを削除したい]]
-[[findコマンドの-printオプションについて>逆引きUNIXコマンド/findコマンドの-printオプションについて]]
-[[ファイルを探す・findコマンド>逆引きUNIXコマンド/ファイルを探す・findコマンド]]
-[[指定したユーザーが作成したファイル一覧を表示する・find>逆引きUNIXコマンド/指定したユーザーが作成したファイル一覧を表示する・find]]
-[[指定した時間前に作成したファイル一覧を表示する方法・find>逆引きUNIXコマンド/指定した時間前に作成したファイル一覧を表示する方法・find]]
-[[指定サイズより大きいファイルを探す・findコマンド>逆引きUNIXコマンド/指定サイズより大きいファイルを探す・findコマンド]]
-[[空っぽのディレクトリ一覧を検索する方法・find>逆引きUNIXコマンド/空っぽのディレクトリ一覧を検索する方法・find]]
-[[空白を含むファイル名のファイルをfindとxargsの組み合わせで処理する>逆引きUNIXコマンド/空白を含むファイル名のファイルをfindとxargsの組み合わせで処理する]]

* findで指定した拡張子のファイル名一覧を取得する [#q0826c36]
以下のようにfindでファイル一覧を取得し、grepで拡張子がtxtのものを表示しています。
 find . | grep '\.txt$'
これをfindコマンドのみで記す場合は以下のようになります。
 find -name \*.txt

よって、以下のような構文になります。
 find ディレクトリ \*.拡張子

以下に実行例を記します。
 sakura@cygwin ~$ find . -name \*.c
 ./const.c
 ./nanko/nanko/nanko.c
 ./sample/sample1.c
 ./sample/timet.c

* 複数の拡張子を対象にして検索する場合 [#cd468e9d]
上記では、txtのみの例を記しましたが、以下のように\(\)で囲み-orを使用することにより、複数の拡張子を指定することが可能です。~
以下の例では、txtとshを対象に検索しています。
 find . \( -name \*.txt -or -name \*.sh \)
ちなみにgrepを使用した例では、以下のようになります。
 find . | grep -e '\.txt$' -e '\.sh$'

以下に実行例を記します。
 sakura@cygwin /etc$ cd /etc/
 
 sakura@cygwin /etc$ find . \( -name \*.conf -or -name \*.\*rc \)
 ./bash.bashrc
 ./csh.cshrc
 ./defaults/etc/bash.bashrc
 ./defaults/etc/csh.cshrc
 ./defaults/etc/cygserver.conf
 ./defaults/etc/inetd.conf
 <snip>
 ./fonts/conf.d/90-synthetic.conf
 ./fonts/fonts.conf
 ./inetd.conf
 ./man_db.conf
 ./nsswitch.conf
 ./pki/ca-trust/ca-legacy.conf
 ./setup/setup.rc
 ./skel/.bashrc
 ./skel/.inputrc
 ./syslog.conf


よって、複数の拡張子を指定し検索する場合は、以下のようになります。
 find ディレクトリ \( -name \*.拡張子 -or -name \*.拡張子 \)
3つの場合は、さらに -or -name 拡張子を指定すればよいです。
 find ディレクトリ \( -name \*.拡張子 -or -name \*.拡張子 -or -name \*.拡張子 \)

* 複数のディレクトリを対象にする [#jca94a89]
上記の例では、ドット(.)を指定しカレントディレクトリおよびカレントディレクトリ配下のサブディレクトリを対象に~
指定した拡張子のファイルを検索した例を記しました。

複数のディレクトリを指定したい場合は、findの後にディレクトリを指定します。~
以下に/etc, /varを対象にlog, conf拡張子ファイル指定し実行した時の出力例を記します。
 $ find /etc /var/ \( -name \*.log -or -name \*.conf \)
 /etc/defaults/etc/cygserver.conf
 /etc/defaults/etc/inetd.conf
 /etc/defaults/etc/man_db.conf
 /etc/defaults/etc/pki/ca-trust/ca-legacy.conf
 /etc/defaults/etc/syslog.conf
 /etc/fonts/conf.d/10-scale-bitmap-fonts.conf
 /etc/fonts/conf.d/20-unhint-small-vera.conf
 /etc/fonts/conf.d/30-metric-aliases.conf
 /etc/fonts/conf.d/30-urw-aliases.conf
 /etc/fonts/conf.d/40-nonlatin.conf
 /etc/fonts/conf.d/45-latin.conf
 /etc/fonts/conf.d/49-sansserif.conf
 /etc/fonts/conf.d/50-user.conf
 /etc/fonts/conf.d/51-local.conf
 /etc/fonts/conf.d/60-latin.conf
 /etc/fonts/conf.d/65-fonts-persian.conf
 /etc/fonts/conf.d/65-nonlatin.conf
 /etc/fonts/conf.d/69-unifont.conf
 /etc/fonts/conf.d/80-delicious.conf
 /etc/fonts/conf.d/90-synthetic.conf
 /etc/fonts/fonts.conf
 /etc/inetd.conf
 /etc/man_db.conf
 /etc/nsswitch.conf
 /etc/pki/ca-trust/ca-legacy.conf
 /etc/syslog.conf
 /var/log/setup.log

以上、findで拡張子を指定し検索する方法でした。

#htmlinsertpcsp(linux_btm_top.html,linux-sp.html)
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS