LoginSignup
1
1

findコマンドで、現在のディレクトリ以下のファイルを検索したい時

Posted at

コマンド操作に慣れようと、現在のディレクトリ以下にあるファイルを検索して削除しようとしたところ思うように検索ができなかったので、備忘録として残します。

ディレクトリ構成

project-root-directory/←現在地
│
├── database/            
│   ├── factories/       
│   ├── migrations/      
│   └── seeders/ 
│		├──PostsTableSeeder.php
└── ...

こんな感じで、project-root-directory以下にあるPostsTableSeeder.phpを検索→削除という流れで、実行しようとした。

試したこと

1回目

find ./ -name PostsTableSeeder | rm PostsTableSeeder.php
rm: PostsTableSeeder.php: No such file or directory

ファイルがないよ〜って言われた。

rmの前に、findで検索できてるかもわからなかったので、findのみ実行。

2回目

find ./ -name PostsTableSeeder

何の表示も出てこん。

.で、カレントディレクトリ配下の検索になっているはずなので、書き方に問題はないはず。

nameは、部分一致で該当ファイルがあれば、表示してくれるオプション。

3回目

find ./ -type f -name PostsTableSeeder.php

typeのオプションを加えて、fとしてファイルを指定してみた。

./database/seeders/PostsTableSeeder.php

表示がされた!!!

4回目

find ./ -type f -name PostsTableSeeder.php | rm -rf PostTableSeeder.php
rm: PostsTableSeeder.php: No such file or directory

検索できてるはずなのに、ダメだった。

どうやら、findとrmをパイプで繋ぐことができないらしい。

ということで、findで見つかったファイルに対してrmコマンドを実行していくことにした。

5回目

find ./ -type f -name PostsTableSeeder.php -exec rm -f {} \;

削除できた〜!!!

execは、findコマンドにおいて見つかった各ファイルに対して特定のコマンドを実行するためのオプション。具体的には、-execオプションの後に実行するコマンドを指定し、その末尾に \; を置くことでfiindの終了を意味する。{}find によって見つかったファイルに対するプレースホルダで、これを記述することで、特定の値が入るべき場所を示すらしい。

まとめ

検索結果に出てこない時は、typeなどのオプションを駆使して、条件絞った方が検索結果に表示されやすいかもですね〜

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1