コマンド操作に慣れようと、現在のディレクトリ以下にあるファイルを検索して削除しようとしたところ思うように検索ができなかったので、備忘録として残します。
ディレクトリ構成
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などのオプションを駆使して、条件絞った方が検索結果に表示されやすいかもですね〜
参考