findコマンドの基本的な使い方を紹介します。
- 乗車
- 削除
ナビゲーション
まず、次のようなファイルやフォルダがあると仮定します。
$ tree
.
├── test1
│ └── 123.log
├── test1.txt
├── test2
│ └── 111.log
├── test2.txt
├── test3
│ └── 333.log
└── test3.txt
findを利用して、簡単なファイルを探すときは、次のようなコマンドを使用します。
ここで、 starting point
は移動するフォルダのパスです。
$ find [starting-point...] -name "file name"
例えば、次のようにナビゲーションパスを .
に設定すると、現在のパスにあるすべてのファイルを検索します。
$ find . -name "*.log"
./test2/111.log
./test1/123.log
./test3/333.log
もし次のようにナビゲーションパスを省略すると、現在のパスに基づいて探索をします。
$ find -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
次のように1つ以上のナビゲーションパスを入力することができます。
つまり、次のコマンドは、 /user
、/home
、 /tmp
パスからjarファイルを検索します。
$ find /user /home /tmp -name "*.jar"
/home/js/apps/idea-IC-203.5981.155/lib/jshell-frontend.jar
/home/js/sources/openjdk-jdk8u/jdk/test/tools/launcher/UnicodeTest.jar
....
Case Insensitive
findコマンドは、基本的に大文字と小文字を区別して検索します。
したがって、次のように txt
とTXT
の検索結果が異なる場合があります。
$ find -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.TXT"
もし大文字小文字を区別せずに検索したい場合は -iname
オプションを使用します。
$ find -iname "*.TXT"
./test2.txt
./test1.txt
./test3.txt
最大深度와最小深度
検索パスを設定すると、そのパスの下にあるすべてのファイルを検索します。
ディレクトリの深さ(depth)を設定して、それ以下またはそれ以上のファイルは検索したくない時があります。
こういうときは、 -maxdepth
と-mindepth
オプションを使用して範囲を指定してくれることができます。
次のような構造のディレクトリがあると仮定します。
$ tree
.
├── test1
│ ├── 123.log
│ └── test4
│ ├── 4555.log
│ └── test5
│ └── 666.log
├── test1.txt
├── test2
│ └── 111.log
├── test2.txt
├── test3
│ └── 333.log
└── test3.txt
maxdepth
次のように最大depthを2に設定すると、depthが2以下のファイルを対象に検索します。 ( depth 0
は、現在のパスを意味します。)
$ find . -maxdepth 2 -name "*.log"
./test2/111.log
./test1/123.log
./test3/333.log
mindepth
次のように最小depthを3に設定すると、depthが3以上のファイルを対象に検索します。
$ find . -mindepth 3 -name "*.log"
./test1/test4/4555.log
./test1/test4/test5/666.log
エラーログの出力ない
フォルダが存在しないか権限がない場合は、次のようにエラーログが出力されます。 エラーログが非常に多く、出力なって検索結果を見ることを困難にすることがあります。
$ find /user /tmp -name "*.jar"
find: ‘/user’: No such file or directory
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-upower.service-ts25lg’: Permission denied
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-switcheroo-control.service-tftxRh’: Permission denied
find: ‘/tmp/systemd-private-9f49ea226b4d4974860461c1ab2610d8-systemd-resolved.service-QzA0Bf’: Permission denied
こういうときは、次のように 2> /dev/null
でエラーログは、端末に出力されないようにすることができます。
$ find /user /tmp -name "*.jar" 2> /dev/null
特定の種類のファイルのみ検索
特定の名前のディレクトリを検索したり、特定の名前のファイルを探したいときがあります。
こういうときは、 -type
コマンドを使用します。次のようなオプションを追加します。
-type d
:Directoryを対象に検索を実行します-type f
:一般的なFileを対象に検索を実行します
上記のオプションを使用してナビゲートすると、次のような結果が出力されます。
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -type d -name "test*"
./test2
./test1
./test3
$ find . -type f -name "test*"
./test2.txt
./test1.txt
./test3.txt
typeのためのより多くのオプションは、findのman pageを参照してください。
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link;
s socket
D door (Solaris)
削除
findで、目的のファイルを探して、そのファイルを削除したいときがあります。
findコマンドの最後に -delete
オプションを追加すると、検出されたファイルが削除されます。
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.txt" -delete
$ ls
test1 test2 test3
-execを利用して削除
-exec
オプションは検出されたファイルにexecを適用して、どのコマンドを実行するためのオプションです。
-exec rm {} \;
を入力すると、検出されたファイルに対して削除をするようにすることができます。
(単にファイルを削除するのであれば -delete
オプションが簡単です。)
$ ls
test1 test1.txt test2 test2.txt test3 test3.txt
$ find . -name "*.txt"
./test2.txt
./test1.txt
./test3.txt
$ find -name "*.txt" -exec rm {} \;
$ ls
test1 test2 test3
Related Posts
- Linux - Hardware情報を示すコマンド
- Virtualenvインストールとセッティングする方法(Ubuntu)
- Linux - ファイル更新日時 確認
- Vi/Vimから1行または複数行を削除する方法
- UbuntuでGoogleドライブを使用する(ローカルフォルダにマウント)
- Ubuntuで利用可能なテキストエディタの紹介
- Ubuntu(Linux) - RAM(メモリ)サイズの確認
- Ubuntu(Linux)でMicrosoft Edgeブラウザをインストールする方法
- Ubuntu(Linux)からVisual Studio Codeをインストールする
- UbuntuでRight ALTをハンヨンキーに変換する
- Ubuntu - Python 3.9のインストール方法
- Proxy環境でpipを使用する方法
- Linux - IPアドレスを確認
- Linux - MAC Addressを確認する
- Linux - findコマンド
- Ubuntu 20.04 - SSHのインストールと接続方法
- apt remove、purge、autoremoveコマンドの違い
- Ubuntu 20.04 - OpenJDK 11のインストール、削除、
- Ubuntu 20.04 - VLC Playerのインストール
- Ubuntu - kernel更新する方法(manually)
- Bashシェルスクリプトファイルの絶対パスを取得
- Ubuntu18.04のネットワークイーサネットの名前を変更する方法(enp?をeth0に変更)
- Linux - chmodコマンドを使用する方法
- Linuxの - スィベン(Shebang)は何ですか?
- Linuxファイル圧縮コマンドまとめ
- UbuntuのデスクトップにShortcutアイコンを作成する方法
- UbuntuでPythonのバージョンを変更する方法