% find . -name '*~' -exec rm {} \;
404 Blog Not Found:勝手に添削 - find(1)
% find . -type f -name '*~' | xargs rm
% find . -type f -name '*~' | perl -nle unlink
わたしなら
% find . -type f -name '*~' | sed 's/^/rm /'で確認し、OK なら
% find . -type f -name '*~' | sed 's/^/rm /' | shで消します。
いまどき fork/exec rm のオーバーヘッドがどれほどのものか。
xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに
rm が複数回実行されるときの違いにどれほどの差があると言うのか。
誤差の範囲である。
コンピュータが速くなった今、重視すべきは確実性。
% find . -type f -name '*~' | sed 's/^/rm /'として、
rm ./hoge~
rm ./dir/fuga~
rm ./foo/bar/baz~
という出力をじっくり眺め、問題がないことを確認する。OK なら、最後に "| sh" をつけて
% find . -type f -name '*~' | sed 's/^/rm /' | sh
とする。
削除してマズいファイルを見つけたら、grep -v で除外すればよい。
find コマンドは、人が使うには難しすぎる。なんだよ {} \; って。
xargs コマンド は、何をするコマンドなのかさえ直感的にわかりづらい。
わざわざ難しいことをする必要はないではないか。
単純なファイル削除ではあまり利点が見えないかもしれないが、便利なのは例えば
% find . -name \*.html | sed "s|\(.*\)|command < \1 > out/\1 | "などというとき。出力が
command < hoge.html > out/hoge.htmlとなっていることをじっくり確認して、最後に "| sh" を付けて実行する。
何が起こるかは出力をじっくり観察すればわかる。見よ、この安心感。
…ってちょっと無理があるか? sed の基礎はおさえておかなきゃいけないし、
メタキャラクタ入りのファイルに弱いしなぁ。
sh をつけるやり方を流行らせたいんだが、無理かなー。いやほんと、便利よ。
最初の数行だけ試しに実行したかったら出力をマウスでコピペすればいいし、
コマンドラインだけでがんばるのが厳しかったら、ファイルにリダイレクトして
エディタで中身をいじって
% sh < command.txtとしてもいい。
ちなみに環境により挙動が異なる echo(1) は使わず、printf(1) を使うのが
POSIX 的な解かと思います。といっても、まわりの人が全然知らないので
仕事ではあえて使わないけど。
« 人材募集その2 | ホーム | web 開発のヒアリングシート/チェック項目 »
ファイル名に空白が含まれている場合も考えて、while と read を使うのはどうでしょうか
ファイル名に空白が含まれているとき、 find の出力をパイプで加工して sh にわたすと、意図しない結果になることが多いです。
何度か痛い目にあったため、わたしは while と read を使って次のようにしています。"$f" とクオートを使ってるのがみそです。
find . -type f | (while read f; do hoge "$f"; done)
コマンド hoge のところを好きなのにかえるかんじです。
とおりすがり | URL | 2007-03-30(Fri)13:36 [編集]
sedよりもxargsの方が直感的に使いやすいけどなぁ。
| URL | 2007-03-30(Fri)23:21 [編集]
GNU findutils
> find . -type f | (while read f; do hoge "$f"; done)
ファイル名にバックスラッシュが含まれている場合に備えて、
read に -r オプションをつけておいても損はない。
もっとおススメは、
find . -type f -print0 | xargs -0 hoge
kk | URL | 2007-03-30(Fri)23:42 [編集]
トラックバック URL
この記事にトラックバックする(FC2ブログユーザー)
あわてるな ディスクはそんなに 速くない
誤差の範囲かどうかは、ファイル数による。無精で短気で傲慢なプログラマ | find には sh!いまどき fork/exec rm のオーバーヘッドがどれほどのものか。xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときにrm が複数回実行されるときの違いに....
404 Blog Not Found 2007-03-30 (Fri) 04:40
[ブログ的な何か][プログラム] shの使いかた
なんだかんだ言って、sed や awk は使いにくい。あたしのようなタコ linuxer には特に。 find -name ”*.html” -exec sed -e ”s/hoge/HOGE/g” > {} ¥; が動かないのは、ちゃんとした un*x な方々には常識なのだろう。この場合 > が -exec の引数とは認識されな
wiredBeep - gblog 2007-05-24 (Thu) 23:05
UNIXサーバー
国内UNIXサーバー市場は2000年下半期をピークに縮小を続けている。しかし、そ...
IT用語 2007-12-14 (Fri) 17:38
| ホーム |
