今回は、findコマンドにて検索したファイルを削除する方法について調べました。
削除したいファイルを探して….削除という流れが1度でできると作業効率がうんとアップすると思うので是非参考にしてみてください。
実現したいこと
今回検証で実現することはこんな感じです。
- /usr/local/work/test配下に01, 02, 03, 04…10までの10個のファイルを作成する
- findコマンドで検索した“0”から始まるファイルのみ削除する
- 10というファイルのみが残っている…ハズ
↓ファイルは以下のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@test 18:21:26 ~]# ls -l /usr/local/work/test/ 合計 0 -rw-r--r--. 1 root root 0 9月 20 15:37 01 -rw-r--r--. 1 root root 0 9月 20 15:37 02 -rw-r--r--. 1 root root 0 9月 20 15:37 03 -rw-r--r--. 1 root root 0 9月 20 15:37 04 -rw-r--r--. 1 root root 0 9月 20 15:37 05 -rw-r--r--. 1 root root 0 9月 20 15:37 06 -rw-r--r--. 1 root root 0 9月 20 15:37 07 -rw-r--r--. 1 root root 0 9月 20 15:37 08 -rw-r--r--. 1 root root 0 9月 20 15:37 09 -rw-r--r--. 1 root root 0 9月 20 15:37 10 |
実行方法は2パターン
2種類の実行方法がありますので、順番に紹介します。
が、その前にまずはfindコマンドで削除対象を見つけてみましょう。(どれを消すかを明確化するために)
下のコマンドで今回の削除対象のファイルを探すこととします。
1 2 3 4 5 6 7 8 9 10 11 |
# /usr/local/work/test 配下の"0"から始まるファイルを検索する [root@test 18:20:44 ~]# find /usr/local/work/test/ -type f -name "0*" /usr/local/work/test/01 /usr/local/work/test/02 /usr/local/work/test/03 /usr/local/work/test/04 /usr/local/work/test/05 /usr/local/work/test/06 /usr/local/work/test/07 /usr/local/work/test/08 /usr/local/work/test/09 |
typeオプションをfとすることでファイルのみを、
nameオプションで0*とすることで0から始まるもののみを検索します。
というわけで、上のコマンドに少しプラスして出てきたファイルを削除しましょう。
xargsを使用する
まずは、xargsを使用する方法です。
1 2 |
findで探したファイルをパイプでxargsに渡して削除する # find /usr/local/work/test/ -type f -name "0*" | xargs rm -f |
execオプションを使用する
次にfindコマンドのオプションであるexecオプションを使用します。
1 2 |
execコマンドを使用するパターン # find /usr/local/work/test/ -type f -name "0*" -exec rm -f {} \; |
このコマンドでは、“-exec” と“{} \;”の間にコマンドを入力することで実現しています。
xargsとexecオプション どっちがはやい?
ずばり、xargsの方です!!!
理由は、内部での処理が違うから。
xargs: rm -f ファイル1 ファイル2 ファイル3 ファイル4…
-exec: rm -f ファイル1, rm -f ファイル2, rm -f ファイル3, rm -f ファイル4…
↑こんな感じの処理になるのでxargsの方がはやい、ということのようです。
ファイルの数が増えれば増えるほど速度に差が出るのでxargsを使う方が無難。。。
最後に
今回は、findコマンドで発見したファイルを削除する。ということでしたが、
他のコマンドに応用することも可能ですので、いろいろ応用できそうです。
というわけで、本日は検索したファイルを削除するコマンドの紹介でした!
では〜〜〜
コメント