- - PR -
solarisのfindコマンド
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-14 22:06
solaris9のfindコマンドについて以下の要件を
満たす方法をご教授下さい。 「特定のディレクトリのみを検索対象とし、下位のディレクトリ を検索対象としない方法」 具体例) /home/export/a/x.doc /home/export/a/b/y.doc があります。 /home/export/a/x.doc のみを検索結果として出力したい。 find /home/export/a/ -name '*doc' とすると /home/export/a/x.doc /home/export/a/b/y.doc が検索されてしまいます。 linuxなら、「-maxdepth 1」があるのですが solaris9にはありません。 スクリプトで2〜3行になってもよいです。 宜しくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-11-14 23:21
solaris 9のmanのexampleに希望に近いものがあるように思います。
http://docs.sun.com/app/docs/doc/816-5211/6mbcci3bj | ||||||||||||
|
投稿日時: 2006-11-15 01:39
その要件なら、lsでよさそうなのですが、ダメなのでしょうか?
| ||||||||||||
|
投稿日時: 2006-11-15 09:43
がちょんさん
Ayさん ご返信頂きまして有難うございます。 >solaris 9のmanのexampleに希望に近いものがあるように思います。 >http://docs.sun.com/app/docs/doc/816-5211/6mbcci3bj Note: このドキュメントの要求された部分は見つかりませんでした。 と表示されてしまいました。 以下のことですか? example% find . ! -local -prune -o -print 実際に、 cd /home/export/a find . -name "*doc" ! -local -prune -o -print としてみましたが、 x.doc y.doc も検出されてしまいます。 (使い方の誤りか?) >その要件なら、lsでよさそうなのですが、ダメなのでしょうか? 実はfindで検索して、ヒットするものを削除したいのです。 具体的には find /home/export/a/ -name '*doc' -mtime +30 -exec rm -f {} \; lsだと-mtimeやexecが使えないので、なんとかfindで出来ないものかと 考えております。 | ||||||||||||
|
投稿日時: 2006-11-16 00:29
すいません。リンクが間違っていました。
以下のEXAMPLE 3です http://docs.sun.com/app/docs/doc/816-5211/6mbcci3bj?q=prune+find&a=view | ||||||||||||
|
投稿日時: 2006-11-16 23:49
やや後向きな解決手段として、GNU の fileutilsをインストールする方法はいかがでしょうか。
と思ったら、coreutilsに統合されてるみたいでした… これなら -maxdepth が使えると思います。 | ||||||||||||
|
投稿日時: 2006-11-17 02:07
こんばんは。 こんなかんじのシェルスクリプトではダメでしょうか? (検証してないので、xargs rm -f じゃなくて、xargs ls -l で確認してください)
[ メッセージ編集済み 編集者: 温州蜜柑 編集日時 2006-11-17 02:08 ] | ||||||||||||
|
投稿日時: 2006-11-17 10:05
がちょんさん
Ayさん 温州蜜柑さん ご返信頂きまして有難うございます。 >以下のEXAMPLE 3です 確認しました。 find /home/export/a/ -name b -prune -o -name "*.doc" -print bディレクトリ配下を検索しなくなり、期待する結果が得られました。 具体例ではbディレクトリを指定できましたが、実は今後どのような名前の ディレクトリが作成されるか不明です。今はbを指定できましたが cやdといったディレクトリが作成されるかもしれないのです。 (説明不足ですみません。) 作成したスクリプトをcronに登録する予定ですので、意図しない ディレクトリが作成されたときに対処が出来なくなってしまうのです。 >coreutilsに統合されてるみたいでした… 自分の判断でツールをインストールできない環境ですので、 残念ながらこれは出来ないのです。 (説明不足ですみません。) >for elem in `ls $top_dir/*.txt`; do > find $top_dir -type f -name `basename $elem` -mtime +30 | xargs rm -f >done 確認しました。 期待する結果が得られました。 ただ、以下のようなディレクトリ及びファイルが作成されてしまった 場合、意図しない結果となってしまいます。 /home/export/a/x.doc /home/export/a/bkup/x.doc ←誰かが新規作成 誰かが意図的に作成した/bkup/x.docが削除されてしまう。 (これも想定の説明不足ですみません。) それで、皆さんの意見を参考にさせて頂き、 以下で対処することにしました。 cd /home/export/a find . -name "*.doc" -mtime +30 -print | while read F; do echo $F | grep .*[/].*[/].* > /dev/null 2>&1 if [ $? -ne 0 ]; then rm -f $F fi done 皆さん色々とご教授頂きまして有難うございました。 感謝!感謝です |
1