Linuxコマンド逆引き大全
コマンド集(機能別) | コマンド集(アルファベット順) | コマンド逆引き大全 | シェル・スクリプト・リファンレス

 ファイルやディレクトリを探す
$ find / -name find-file
$ locate find-file

 ディレクトリやファイルがどこにあるのかを探すには「find」コマンドを用いる。findの後ろに検索対象ディレクトリ,探すファイル(あるいはディレクトリ)の条件となる判別式の順に指定する。

 ファイル名やディレクトリ名を判別式として使用するには「-name」を用い,その後ろに探したいファイルやディレクトリを指定する。ファイル名にはワイルド・カードも使用できる。


$ find / -name find-file

 findは,指定したディレクトリ以下のすべてのパスを検索対象とするため,検索対象のファイル数が膨大な場合には検索に時間がかかってしまう。そこで,高速に検索ができるように開発されたのが「locate」コマンドである。


$ locate find-file

 ただし,locateを使うには「updatedb」によりファイル・データベースを定期的に更新しておく必要がある。updatedbの実行にはルート権限が必要である。普通は,crontabを用いて定期的にupdatedbを実行するようにする(多くのディストリビューションでは設定済み)。


 応用:ホーム・ディレクトリ以下の100Kバイト以上のファイルの詳細情報を表示する
$ find ~/ -size +100k -ls

 判別式に「-size」を用い,その後ろにサイズを指定する。サイズの前に"+"を付けると指定サイズ以上のファイルを,"-"だと指定サイズ以下のファイルを検索する。また単位は,cがバイト,kがKバイトを表す。

 最後の-lsは結果を「ls -dils」で表示する。


 応用:すべてのユーザーが書き込み可能なファイルを探す
$ find ./ -perm -a+w -type f

 カレント・ディレクトリ以下のすべてのユーザーに実行権限があるファイルを探す。このとき「-type f」によりファイルのみを対象としている。また,「-prem」の後ろにアクセス権限を指定することにより,それに合致したファイルを探してくれる。アクセス権限は,「アクセス権限とは」で紹介する表記方法により指定する。


 応用:現在より3日前に修正されたファイルを探す
$ find ~/ -mtime 3 -fprint result

 「-mtime」判別式により,現在から指定した日数だけさかのぼった日にちに修正されたファイルを検索する。最後の「-fprint result」は,resultファイルに書き込むための指定。


 応用:チルダ(~)ファイルを削除する
$ find ~/ -name *~ -exec rm {} \;

 最後にチルダ(~)が付いているファイルはバックアップ・ファイルである。このコマンドにより,ホーム・ディレクトリ以下のディレクトリ内のすべてのチルダ・ファイルを削除できる。

 最後の「-exec rm {} \;」は検索されたファイルを削除するという意味である。


 応用:空のファイルやディレクトリを削除する
$ find ./ -empty | xargs rm -rf

 指定したディレクトリ以下の空(0バイト)のファイルや,中に何も存在しないディレクトリを探し出して削除する。xargsは検索結果のファイル一覧を作成し,「rm -rf」に受け渡している。


 応用:グループがhoge-grpであるファイルを他のユーザーがアクセスできないようにする
$ find ~/ -group hoge-grp | xargs chmod o=

 ホーム・ディレクトリ以下のファイルやディレクトリ,シンボリック・リンクについて,グループが「hoge-grp」であるものに対し所有者とグループ・ユーザーだけが使用できるようにする。ファイルのみを対象にするには「-type f」判別式を追加する。