ファイルを削除しようと思ったら時間かかった件


クソです
あるディレクトリの中にディレクトリが複数あって、その中にあるなんとか.class とか
なんとか.java とかいうファイルを一括削除する必要があって

GUIで消すのもめんどくせぇなぁって思ってターミナルを開いてコマンド打ち込んで消そうと思ったら上手くいかねぇのなんの。
くそったれ〜

状況として
java/report11/
      /report12/

とかに入ってる*.classとかいうのを消したいんですよ

まぁ最初はlsで全部のファイル表示させてgrepで検索して消せばいいかって思ったんです

$ ls report*
と打ち込んだら当然結果が出てきます
debulin-no-MacBook-Pro:javaのコピー Debulin$ ls report*
report09
DormStudent(1).java Student(1).java report09(1).txt
DormStudent.java Student.java report09.txt
HomeStudent(1).java StudentApp(1).java
HomeStudent.java StudentApp.java



みたいな感じでどんどん出力されるわけです
僕はこの時点で*の意味を”任意のn文字の文字列”だと思いこんでます
っていうか調べたら正規表現じゃなくてシェルのワイルドカードとかいうやつで
"任意の0文字以上の文字列"だそうで、ここでは上手く頭のなかで考えてることができてたわけです
まぁその結果をgrep で絞ろうかとおもってるんで、
$ ls report* | grep *.class

とか書いちゃうわけですね
アタマの中ではこれはつまり

$ ls reportなんとか| grep なんとか.class

を想像してるので
なんとか.class がたくさん表示されるはずでしたが、違ったようでなんも表示されません
はぁ〜^^;

実際に正しいのは
$ ls report* | grep .class

で良いみたいですね
もう意味不明だわ…
ここまではわかったんでそれで検索したマッチしたファイルを消そうと思ったんで、
ちょっとがんばって調べてxargsとかいうコマンドはファイル一覧みたいな感じをうけ取ったらそれをコマンドに引数として渡すコマンドらしい
それを理解したならさっさとrmに渡すべきですよね

$ ls report* | grep .class |xargs rm

ってやってもなんの反応もありません
そりゃ当然です
だってパスが書いてないもの…
$ ls report* | grep .class

の結果は
debulin-no-MacBook-Pro:javaのコピー Debulin$ ls report* | grep .class
ClassRoom.class
DormStudent.class
HomeStudent.class
Student.class
StudentApp.class
VarIntArray.class
AppTest3.class
cm.class
km.class
MyPanel2.class

です
rm
の気持ちになってみたら
分かるとおもうんですけど、
僕が今消したいのは
/javaのコピー/reportなんとか/なんとか.class
ですよね
でもいまさっきまで絞っていたなんとか.classではパス名が書いてないのでrmでは消すことができません…。

ってわけなので、また頑張って調べてみましたら
findってコマンドを使えばいいらしい!

結論から書くと

$ find . -name *.class |xargs rm

で僕のやりたいことは全部できました

未来の僕のために解説しておくとこれは
$ 探せ 今のディレクトリから全部 ファイル名から なんとか.class って奴 |それから それを消せ

という意味になります

$ find . -name *.class
で実行すると見事に

debulin-no-MacBook-Pro:javaのコピー Debulin$ find . -name *.class
./report10/ClassRoom.class
./report10/DormStudent.class
./report10/HomeStudent.class
./report10/Student.class
./report10/StudentApp.class
./report10/VarIntArray.class
./report12/AppTest3.class
./report15/cm.class
./report15/km.class
./report16/MyFrame.class
./report16/MyFrame2.class
./report16/MyPanel.class
./report16/MyPanel2.class

って検索してくれます!
ちゃんとパスがついているのでrmで消せるわけですね 為になりました
これでまた一つ賢くなった気がします

でもこれを学習するためにGUIでチマチマファイル消す以上の時間を失いました
まぁ覚えていればあとで使うこともあるかもしれないから…
でもこういうのって知っていて使っていて当然のスキルなのかもしれませんね



ぬわあああああん疲れたもおおおおおん………

コメント

人気の投稿