terminalコマンド 『find』

komannd

今回は「terminal」のコマンドの1つである「find」を取り上げていきたいと思います。

「find」コマンドはファイルやディレクトリを探してくれるコマンドで、活躍の幅は広いです。

覚えておいて損はないので、これを機に使っていきましょう!

それではみていきましょう!

基本的な使い方

大前提として、「find」コマンドは指定した場所より下の階層を全て調べてくれます。

例えば「ルートディレクトリ」から検索した場合、「ルートディレクトリ」より下の層を全て調べます。

これ以降はこの説明をしないので、頭の隅においておいてください。

まずは基本的な使い方からみていきます。

ファイル

find <ファイル名>

カレントディレクトリ(現在いるディレクトリ)以下のファイル名と一致するものを探してくれます。

ディレクトリ

find <ディレクトリ名>

カレントディレクトリ(現在いるディレクトリ)以下のディレクトリ名と一致するディレクトリを探し、そのディレクトリの中のファイルとディレクトリを出力します。

存在しない時

指定したファイルやディレクトリが存在しない場合以下のようなエラーが発生します。

find: cardene: No such file or directory

cardene」というディレクトリは存在しません。と言われていますね。

オプション

次にオプいションを確認していきましょう。

このオプションを指定することで、もっと便利に「find」コマンドを使用できます。

name

ファイル名やワイルドカードなどで絞り込みをかける」ことができます。

ファイル名

ファイル名を指定する方法は先ほどとそれほど変わりません。

find <探す場所> -name <ファイル名>

検索場所」は、「.(現在のディレクトリ)」、「~(ルートディレクトリ)」、「ディレクトリ名」などを指定できます。

いかに使用例をあげておきます。

# カレントディレクトリから「cardene.py」を検索
find . -name cardene.py

# ルートディレクトリから「cardene.py」を検索
find ~ -name cardene.py

# Desktopから「cardene.py」を検索
fing Desktop -name cardene.py

ワイルドカード

拡張子などで絞り込むことができます。

find <探す場所> -name \*.<拡張子>

検索場所」は先ほどと同じです。

-name」の後ろがわかりにくいですが、「指定した拡張子のファイル全て」という指定方法です。

先頭に「\」をつけてエスケープする必要があるので注意してください。

# カレントディレクトリからpythonファイルを検索
find . -name \*.py 

# ルートディレクトリからテキストファイルを検索
find ~ -name \*.txt

# DesktopからHTMLファイルを検索
fing Desktop -name \*.html

atime

これは「何日前にアクセスしたことがあるファイル」を検索してれます。

」が今日、「」が昨日、「」が一昨日と、数字が大きくなるほど過去になります。

例えば「」を指定した場合「5日前にアクセスしたファイル・ディレクトリ」を検索してくれます。

# カレントディレクトリから、今日アクセスしたファイルとディレクトリを検索
find . -atime 0

# ルートディレクトリから、昨日アクセスしたファイルとディレクトリを検索
find ~ -atime 1

# Desktopから、10日前アクセスしたファイルとディレクトリを検索
fing Desktop -atime 10

期間を指定することもできます。

数字の前に「」をつけることで、「指定した日以内にアクセスしたファイルとディレクトリ」を検索してくれます。

逆に数字の前に「+」をつけることで、「指定した日以前にアクセスしたファイルとディレクトリ」を検索してくれます。

言葉だけだとわかりにくいので、実際にみていきましょう。

# カレントディレクトリから、5日前から今日までアクセスしたファイルとディレクトリを検索
find . -atime -5

# ルートディレクトリから、5日よりも前にアクセスしたファイルとディレクトリを検索
find ~ -atime +5

# Desktopから、10日前から今日までアクセスしたファイルとディレクトリを検索
fing Desktop -atime -10

mtime

今度は「何日前に編集したことがあるファイル」を検索してれます。

指定方法は「atime」とほとんど同じで、「アクセス」ではなく、「編集」したものを探索してくれます。

# カレントディレクトリから、今日編集したファイルとディレクトリを検索
find . -mtime 0

# ルートディレクトリから、昨日編集したファイルとディレクトリを検索
find ~ -mtime 1

# Desktopから、10日前編集したファイルとディレクトリを検索
fing Desktop -mtime 10

# カレントディレクトリから、5日前から今日まで編集したファイルとディレクトリを検索
find . -atime -5

# ルートディレクトリから、5日よりも前に編集したファイルとディレクトリを検索
find ~ -atime +5

# Desktopから、10日前から今日まで編集したファイルとディレクトリを検索
fing Desktop -atime -10

amin

分単位」でも指定することができます。

直前にアクセスしたファイルやディレクトリを検索するのに役立ちそうですね。

指定方法は先ほどと同じです。

# カレントディレクトリから、1分前アクセスしたファイルとディレクトリを検索
find . -mtime 1

# ルートディレクトリから、10分前アクセスしたファイルとディレクトリを検索
find ~ -mtime 10

# Desktopから、30分前アクセスしたファイルとディレクトリを検索
fing Desktop -mtime 30

# カレントディレクトリから、5分以内にアクセスしたファイルとディレクトリを検索
find . -atime -5

# ルートディレクトリから、5分よりも前にアクセスしたファイルとディレクトリを検索
find ~ -atime +5

# Desktopから、10分以内にアクセスしたファイルとディレクトリを検索
fing Desktop -atime -10

mmin

こちらも分単位で「編集したことがあるファイルやディレクトリ」を検索してくれます。

こちらも指定方法は同じです。

# カレントディレクトリから、1分前編集したファイルとディレクトリを検索
find . -mtime 1

# ルートディレクトリから、10分前編集したファイルとディレクトリを検索
find ~ -mtime 10

# Desktopから、30分前編集したファイルとディレクトリを検索
fing Desktop -mtime 30

# カレントディレクトリから、5分以内に編集したファイルとディレクトリを検索
find . -atime -5

# ルートディレクトリから、5分よりも前に編集したファイルとディレクトリを検索
find ~ -atime +5

# Desktopから、10分以内に編集したファイルとディレクトリを検索
fing Desktop -atime -10

empty

容量がないファイルやディレクトリ、つまり「空のファイルやディレクトリを検索」してくれます。

検索して削除したい時に役立ちそうですね。

find <検索場所> -empty
# カレントディレクトリから、空のファイルとディレクトリを検索
find . -empty

# ルートディレクトリから、空のファイルとディレクトリを検索
find ~ -empty

# Desktopから、空のファイルとディレクトリを検索
fing Desktop -empty

type

ファイル」だけ検索したい、「ディレクトリ」のみ検索したい時に役立ちます。

# ファイルのみ検索
find <検索場所> -type f

# ディレクトリのみ検索
find <検索場所> -type d

指定方法も簡単ですね。

# カレントディレクトリから、ファイルを検索
find . -type f

# ルートディレクトリから、ディレクトリを検索
find ~ -type d

# Desktopから、ファイルを検索
fing Desktop -type f

and

検索条件を複数指定し、全ての条件に当てはまるファイルやディレクトリ」を検索します。

find <検索場所> <検索条件1> -and <検索条件2>

より絞り込みたいときに活躍できそうですね。

# カレントディレクトリから、「cardene.pyファイル」を検索
find . -name cardene.py -and -type f

# ルートディレクトリから、「5日以内にアクセスしたディレクトリ」を検索
find ~ -atime -5 -and -type d

# Desktopから、「5分以内に編集した拡張子が.txtのファイル」を検索
fing Desktop -mmin -5 -and -name \*.txt

or

検索条件を複数指定し、いずれかの条件に当てはまるファイルやディレクトリ」を検索します。

find <検索場所> <検索条件1> -or <検索条件2>
# カレントディレクトリから、「cardene.pyファイルと拡張子が.txtのファイル」を検索
find . -name cardene.py -or -name \*.txt

# ルートディレクトリから、「拡張子が.txtのファイルと拡張子が.pyのファイル」を検索
find ~ -name \*.txt -or -name \*.py

not

今後は逆に「指定した条件に当てはまらないファイルやディレクトリ」を検索します。

find -not <検索場所> <検索条件>
# カレントディレクトリから、「拡張子が.txtのファイル以外のファイルとディレクトリ」を検索
find . -not -name \*.txt

# ルートディレクトリから、「拡張子が.txtのファイルと拡張子が.pyのファイル以外のファイルとディレクトリ」を検索
find ~ -not -name \*.txt -and -name \*.py

最後に

今回は「findコマンド」の使い方を見てきました。

よくファイルを検索するとき使うコマンドなので、ぜひこれを機に使ってみてください。

また、他にもオプションはあるので、自分が便利だと思ったら追記します。

自分で調べてみるのも面白いと思うので、それもお勧めします。

何か質問などがあれば、下のTwitterのDMかここのコメントで聞いてください!

それでは!

コメント

タイトルとURLをコピーしました