>find ./ \( -name "wget-log*" \) -print
./wget-log
./wget-log.1
./wget-log.2
でありまして、これらのファイルを削除したいのです。
しかし、man にしたがってやってみても
>find ./ \( -name "wget-log*" \) -exec \ rm {} \;
find: cannot execute rm:: No such file or directory
find: cannot execute rm:: No such file or directory
find: cannot execute rm:: No such file or directory
となります。
ちなみに rm のかわりに /bin/rm を指定しても
>find ./ \( -name "wget-log*" \) -exec /bin/rm {} \;
find: cannot execute /bin/rm:: No such file or directory
find: cannot execute /bin/rm:: No such file or directory
find: cannot execute /bin/rm:: No such file or directory
です。もちろん /bin/rm はありますし、pathも通っています。
ついでに、なぜ末尾に \; が必要なのかも教えてください。
--
鴻巣
kou...@mutt.freemail.ne.jp
> くだらない質問ですが、find の使い方を教えてください。
> >find ./ \( -name "wget-log*" \) -print
この場合、括弧で括る必要はありませんよね。
> >find ./ \( -name "wget-log*" \) -exec \ rm {} \;
> find: cannot execute rm:: No such file or directory
^^^
これは ' rm' というコマンドを実行しようとしているので、
こういう結果になります。(なんで \ を?)
> >find ./ \( -name "wget-log*" \) -exec /bin/rm {} \;
> find: cannot execute /bin/rm:: No such file or directory
こっちはわからないです。何か見落としてるのかな…。
環境は何ですか?
> ついでに、なぜ末尾に \; が必要なのかも教えてください。
例えば (意味なさげな例でごめんなさい)
find . -exec echo {} \; -name '*~' -exec rm {} \;
なんてことをしようと思ったら、\; がないと指定できないです。
--
森 浩二 (MORI Kouji)
E-mail: mor...@hh.iij4u.or.jp
+++ under construction +++
> >find ./ \( -name "wget-log*" \) -exec \ rm {} \;
> find: cannot execute rm:: No such file or directory
> find: cannot execute rm:: No such file or directory
> find: cannot execute rm:: No such file or directory
>
> となります。
答え:その1
シェルのコマンドラインから入力する場合 '{', '}' は制御用の特殊文字として
扱われてしまいます. そのためこれについては ';' の場合と同様に '\' を使っ
てエスケープしておかなければなりません. 従って答えは
find ./ -name 'wget-log*' -exec rm \{\} \;
になります. ';' の前に '\' が付くのも単体ではシェルに解釈されてしまうの
で, それを防ぐためです.
答え:その2
上記のような単純な条件で, 対象となるファイルの数が多いのであれば
find ./ -name 'wget-log*' -print |xargs rm
とすれば rm を起動することによるオーバヘッドを最小限に押さえることができ
ます.
--
Katsurajima "Raven" Naoto(桂島 直人)
Family Emblem: Circle and Left 3 Clove-TOMOE(丸に左三つ丁子巴)
e-mail: ra...@katsurajima.seya.yokohama.jp
あれれ、単体で {} と書いて特殊記号に認識される shell って
どれだろう。
# ${var} をはじめとするマクロ置換の用法ならありますけど。
--
みんつ - mi...@minz.org - http://www.minz.org/ - みぎまつ・ひろし
> あれれ、単体で {} と書いて特殊記号に認識される shell って
> どれだろう。
あれ, おかしいな... 確かにFreeBSDで確かめてみると ash, bash, csh, tcshと
もに'\'がいらないですね... SystemV Release2 ぐらいの時のバグ満載cshか何
かで覚え込んだのがそのままになっていたようです. 失礼しました (^_^;
In article <874s9v3...@saorin.noe.mcu.or.jp>, MORI Kouji <mor...@hh.iij4u.or.jp> wrote:
|> >find ./ \( -name "wget-log*" \) -exec \ rm {} \;
|> find: cannot execute rm:: No such file or directory
| ^^^
|これは ' rm' というコマンドを実行しようとしているので、
|こういう結果になります。(なんで \ を?)
これが原因でした。でも、これには理由があって、man find の
7. To remove all files named a.out or *.o that have not been accessed
for a week and that are not mounted using nfs, enter:
find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs
-exec \ rm {} \;
を参考に、無条件に \ をつけていました。環境は AIX です。
この man はミスプリ??
|> >find ./ \( -name "wget-log*" \) -exec /bin/rm {} \;
|> find: cannot execute /bin/rm:: No such file or directory
|
|こっちはわからないです。何か見落としてるのかな…。
|環境は何ですか?
書き間違えていました。実はこっちにも \ をつけていました。
In article <14557.26969....@zenchan.katsurajima.seya.yokohama.jp>, ra...@katsurajima.seya.yokohama.jp wrote:
|find ./ -name 'wget-log*' -print |xargs rm
|
|とすれば rm を起動することによるオーバヘッドを最小限に押さえることができ
|ます.
知らなかった..。今までずっとこれでしのいでいました(涙)。
#!/usr/local/bin/perl
while (<STDIN>) {system("$ARGV[0] $_");}
--
鴻巣
kou...@mutt.freemail.ne.jp
> これが原因でした。でも、これには理由があって、man find の
>
> 7. To remove all files named a.out or *.o that have not been accessed
> for a week and that are not mounted using nfs, enter:
>
> find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs
> -exec \ rm {} \;
>
> を参考に、無条件に \ をつけていました。環境は AIX です。
> この man はミスプリ??
本当は
find / \( -name a.out -o -name '*.o' \) -atime +7 ! -fstype nfs -exec \
rm {} \;
となるはずだったのが man の整形ミスで改行位置が変わってしまったとか。:-)
--
森 浩二 (MORI Kouji)
(株)淺沼組 技術研究所
E-mail: mo...@tri.asanuma.co.jp
わたしの手元にあるものでは、rc というのが {} を特別あつかいし
ていますね。
; rc -V
$Release: @(#)rc 1.6 1999-05-28 $
; ls {}
syntax error
;
こいつは \ で特殊記号をエスケープしてくれないので
find ./ -name 'wget-log*' -exec rm '{}' ';'
のように書かきゃなりません。
--
むらたしゅういちろう
> > >find ./ \( -name "wget-log*" \) -exec /bin/rm {} \;
> > find: cannot execute /bin/rm:: No such file or directory
>
> こっちはわからないです。何か見落としてるのかな…。
> 環境は何ですか?
ついでに別解を。
#ファイル名に空白が混じっている可能性は無視(^^;)
(1)
>rm `find ./ -name "wget-log*" -print`
ファイル数がそんなに多くなければこれが気楽です。
(2) cut and paste ができる環境(xterm など)限定の手抜き法。
>find ./ -name "wget-log*" -print
./wget-log
./wget-log.1
./wget-log.2
>rm `cat`
./wget-log ←上から切り貼りする
./wget-log.1
./wget-log.2
^D
私は軟弱なので最近はこれで間に合わせてます(^^;)
☆-- 飯嶋 浩光 ----------------------------------------------☆
|IIJIMA 'Delmonta' Hiromitsu an der Universitaet Tokyo |
☆-----------------------------------------------------------☆
|【宣伝】Windows 95/98 管理人のための MS-DOS 基礎講座 |
| http://user.ecc.u-tokyo.ac.jp/~l94102/dos/ |
☆-------------------------- L94...@mail.ecc.u-tokyo.ac.jp --☆