Linuxで実行形式ファイルだけ削除したい

こんにちは、河野です。

CとかGolangとか、コンパイルする言語を扱っていると、コンパイル後の実行形式ファイルが出来るのですが、gitなどでコード管理する際には邪魔なので、削除したくなります。

以下、Cを勉強中のフォルダです。

削除したいのは、この中の*が付いている以下の5つのファイルです。

ファイルを探す

findですが、-executableというオプションがあります。

と実行してみると、ディレクトリも含まれてしまいました。あと、gitディレクトリも含まれていますね。

-executable というのは実行権限が付いているものが対象になるようです。なのでディレクトリも含まれてしまうということですね。-typeで絞り込みます。

これでディレクトリは除外されましたが、.git配下のhookスクリプトも引っかかってしまいました。

grep で除去

grepで除去するのが直感的な気がします。

問題ないですね。findではできないのでしょうか。

pathで絞り込み

find の pathオプションを使うと、ファイルのパスに含まれる文字列を指定できます。これにnotを組み合わせることで、.gitが含まれないものが取得できます。

同じ結果になりました。

ファイルの削除

grepで絞り込んだ場合は、さらにパイプでxargsに渡すのが良いでしょうか。

find で絞り込んだ場合には、さらにdeleteオプションで対応できそうです。

実行したら綺麗に消えました。

それzshなら一発でできるよ!

ちなみにzshだと、ファイル指定が豊富なので、rmコマンドだけで対応できます。
例えばlsだと、

こんな感じです。

後ろに付けている括弧のなかでファイルの種類が指定できます。

* … 実行形式ファイル
@ … シンボリックリンク
/ … ディレクトリ

などなど。

rmで使う場合には、以下のようになります。

さすがzshですね!

まとめ

というわけで、みんなzsh使いましょう!

Comments are closed, but you can leave a trackback: Trackback URL.

Comments

  • にゃん  On 2014年3月6日 at 18:56

    それ、.gitignoreに少し記述足すだけでいいのでは…

    • 河野 健太朗  On 2014年3月7日 at 09:10

      そうですね。特定のファイル(a.out)とかなら.gitignoreでコミット対象外にした方良いと思います。

      今回は.gitignoreを使わずに解決したかったので、上記の方法を模索していました。