アカウント名:
パスワード:
タイトルはスクリプトキディ気取りで。プレーンファイルのみとかログとかはばっさり無視する前提で。ええと、 xargs でファイル名に空白文字を含んだをパイプで引き渡すと意図しない挙動になる具体的には1. 誤った解釈でブランク・キャラ直前でぶった切られた名前で処理。2. その際に本来ありえなかった標準エラー出力がべろべろ吐き出される。は避けるべきではないかと。(エラー出力が処理と同期して得られる保証がないので見て切り分けがつらいはず)
-exec rm は、ファイル一個一個ずつrmコマンドを呼び出すので、xargs の方が望ましいでしょう。
で、xargsで空白文字入りのファイル名がいけるようにするのが、find の -0 オプションと、xargs の -0 オプション。findは空白ではなく、\0 区切りで出力し、xargs は \0 区切りで読み込み分割処理します。
#すでに自己ツッコミが入ってますが、\0区切りなのでteeしたらダメですね。
それにしても、find を今回のネタのように使うときは、毎回「 -mtime の + と - って、どっちが新しいほうだっけ?」って悩んでしまいます。man を見ても微妙な感じなで自身が持てないので、毎回まずprintだけして確認してる…あとは、適当にtouchしたファイルを元に-newer したりとか。これは字面から勘違いしようがないし。
最近は-exec xxx {} \;じゃなくて-exec xxx {} +だなぁ。;をエスケープしなくていいし。
えPOSIXじゃないのはだめ?
最新標準、筋の良さなど多数派として正当とアピールできる観点を無視すればわたしが頑迷な守旧派として悪目立ちできている、ということでいいですね?!やっぽー!
findにもxargsにも空白文字入りファイル対策があったとは。ご教示多謝。不明を恥じます。
正直なところ find コマンドをふりかざす時点でリソースをがっつり大食いする前提なのであれこれと見積もりが甘くなるきらいあり。
ログを取るタイミングとしては他に、xargsを実行するときと、rmを実行するときがあって、それぞれ以下の通り:xargs -trm -v後者はお気づきの通り。
ファイル名については、空白が含まれることの他に、可能性は低くてもあり得るのは、ハイフン「-」で始まること。例えば、rm -AFileStartingWithHypenが失敗してしまう。これを防ぐにはrm -- -AFileStartingWithHypenとする、ってことらしいです。
2点ご指摘多謝。とりわけハイフンを含むファイル名の事故ケースは指示通り実行していったん抹消したら影響が軽微でも原状回復が面倒なケースに直結する予感。
findにもxargsにも空白文字入りファイル対策があったとは。
しかしながら POSIX 非標準なので、某原理主義とかでは使うことが出来ず困ってしまうかも。実際のところこれらが無い環境って存在するのだろうか。
>某原理主義
Version 7 にあこがれているわたしは Version 8 もなんだかなーというくらいの原理主義者かもしれない。
// コメントにカナ漢字を使うのにもどうやるの?と悩んだ発端の契機から。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
タイトルはスクリプトキディ気取りで。
プレーンファイルのみとかログとかはばっさり無視する前提で。
ええと、 xargs でファイル名に空白文字を含んだをパイプで引き渡すと
意図しない挙動になる
具体的には
1. 誤った解釈でブランク・キャラ直前でぶった切られた名前で処理。
2. その際に本来ありえなかった標準エラー出力がべろべろ吐き出される。
は避けるべきではないかと。
(エラー出力が処理と同期して得られる保証がないので見て切り分けがつらいはず)
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
-exec rm は、ファイル一個一個ずつrmコマンドを呼び出すので、xargs の方が望ましいでしょう。
で、xargsで空白文字入りのファイル名がいけるようにするのが、find の -0 オプションと、xargs の -0 オプション。
findは空白ではなく、\0 区切りで出力し、xargs は \0 区切りで読み込み分割処理します。
#すでに自己ツッコミが入ってますが、\0区切りなのでteeしたらダメですね。
それにしても、find を今回のネタのように使うときは、毎回「 -mtime の + と - って、どっちが新しいほうだっけ?」って悩んでしまいます。man を見ても微妙な感じなで自身が持てないので、毎回まずprintだけして確認してる…
あとは、適当にtouchしたファイルを元に-newer したりとか。これは字面から勘違いしようがないし。
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:2)
最近は-exec xxx {} \;じゃなくて-exec xxx {} +だなぁ。;をエスケープしなくていいし。
えPOSIXじゃないのはだめ?
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
最新標準、筋の良さなど多数派として正当とアピールできる観点を無視すれば
わたしが頑迷な守旧派として悪目立ちできている、ということでいいですね?!
やっぽー!
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
findにもxargsにも空白文字入りファイル対策があったとは。
ご教示多謝。不明を恥じます。
正直なところ find コマンドをふりかざす時点でリソースを
がっつり大食いする前提なのであれこれと見積もりが甘くなるきらいあり。
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
ログを取るタイミングとしては他に、xargsを実行するときと、rmを実行するときがあって、それぞれ以下の通り:
xargs -t
rm -v
後者はお気づきの通り。
ファイル名については、空白が含まれることの他に、可能性は低くてもあり得るのは、ハイフン「-」で始まること。例えば、
rm -AFileStartingWithHypen
が失敗してしまう。
これを防ぐには
rm -- -AFileStartingWithHypen
とする、ってことらしいです。
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
2点ご指摘多謝。
とりわけハイフンを含むファイル名の事故ケースは指示通り実行して
いったん抹消したら影響が軽微でも原状回復が面倒なケースに直結する予感。
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
しかしながら POSIX 非標準なので、某原理主義とかでは使うことが出来ず困ってしまうかも。
実際のところこれらが無い環境って存在するのだろうか。
Re:find $DIR -mtime +30 -print -exec rm '{}' \; (スコア:1)
>某原理主義
Version 7 にあこがれているわたしは Version 8 もなんだかなー
というくらいの原理主義者かもしれない。
// コメントにカナ漢字を使うのにもどうやるの?と悩んだ発端の契機から。