Linuxファイルシステムの中はまるで迷宮のよう。
findコマンドを使いこなして、目的のファイルを探せるようになりたいです。


  • まずfindと打ってみました。
例えば、こんなディレクトリ構造でこんなファイル配置になってるとします。
~/finddir/1.txt
~/finddir/a/a.txt
~/finddir/b/b.txt
~/finddir/c/c.txt
~/finddir/d/d.txt
~/finddir/e/e.txt
finddirにcdします。
$ cd ~/finddir
まずはfindだけ打ち込んでみました。
すると、ドット"."を含む全ディレクトリ、全ファイルが出力されました。
$ find

.
./c
./c/c.txt
./e
./e/e.txt
./a
./a/a.txt
1.txt
./d
./d/d.txt
./b
./b/b.txt
  • 次にfind ファイル名を打ち込んでみました。
すると指定したファイルだけが出力されました。
$ find /a/a.txt

./a/a.txt
  • 次にfind -name ファイル名(ダブルクォーテーションを付けずワイルドカード指定を打ち込んでみました。
するとシェルがワイルドカードをglob展開し、a,b,c,d,eディレクトリ配下のtxtファイル全てが出力されました。
$ find */*.txt

./a/a.txt
./b/b.txt
./c/c.txt
./d/d.txt
./e/e.txt
  • 次にfind -name ファイル名(ダブルクォーテーションを付けてワイルドカード指定を打ち込んでみました。
するとシエルによるワイルドカードのglob展開が抑制されfindコマンドがワイルドカードを展開し、finddirディレクトリ配下のtxtファイル全てが出力されました。(1.txtも含まれた。)
$ find -name "*.txt"

./c/c.txt
./e/e.txt
./a/a.txt
1.txt
./d/d.txt
./b/b.txt
  • 次にfind  / -name ファイル名(ダブルクォーテーションを付けてワイルドカード指定)打ち込んでみました。
すると、ルートディレクトリ配下の全てのtxtファイルを検索しますが、アクセス権が無いファイルは”Permission denied"が表示されます。
$ find / -name "*.txt"

find: `/var/spool/rsyslog': Permission denied
find: `/var/spool/cups': Permission denied
find: `/var/spool/cron/crontabs': Permission denied
find: `/var/lib/lightdm-data/lightdm': Permission denied
find: `/var/lib/lightdm': Permission denied
find: `/var/lib/udisks2': Permission denied
/var/lib/anthy/depgraph/indepword.txt
find: `/var/lib/sudo': Permission denied
find: `/var/lib/polkit-1': Permission denied
/var/lib/nssdb/pkcs11.txt
find: `/var/cache/lightdm/dmrc': Permission denied
・・・
  • エラーメッセージを抑制するには、標準エラー出力を/dev/nullにリダイレクトします。
すると、txtファイルのみ出力されました。
$ find / -name "*.txt" 2>/dev/null

/var/lib/anthy/depgraph/indepword.txt
/var/lib/nssdb/pkcs11.txt
/var/cache/dictionaries-common/ispell-dicts-list.txt
...

IMG_20190127_124635

スポンサードリンク