アプリ版:「スタンプのみでお礼する」機能のリリースについて

▽やりたいこと
abcde/cache/以下にある、1日以上前にあるファイルを全削除するにはどうすればよいでしょうか。

abcde/cache/ファルダは、複数あります。

まず初めにsshで接続して、実際にファイルを探し、削除してから、cronなるものにチャレンジしようと思っていましたが、一番初めのファイルを探すところで躓きました。

find . -name "cache"だと、消したくない、cacheフォルダまで、
検索されてしまうので、
まずは、複数あるabcde/cache/フォルダを探す方法を知りたいです。

▽step0(ssh)
abcde/cache/フォルダを探す
▽step1(ssh)
abcde/cache/フォルダ以下のファイル全削除
▽step2(ssh)
abcde/cache/フォルダ以下の、1日以上前にあるファイルを全削除
▽step3(cron)
上記をcrondで実行

ヒントだけでもよいので、誰か教えてください。

A 回答 (6件)

abcdeの下ってそういう意味でしたか。


それならばこうです。
find . -type f -regex '.*/abcde/cache/[^/]*' -print

実際に消去するには -print を
-exec rm -f \{\} \;
に。
crontabに書くには . ではなくフルパスで。

この回答への補足

ありがとうございます。
アドバイスのおかげで、ものすごく進展した気がします。

もしよければですが、さらに二点教えてください。
▼1.
find . -type f -regex '.*/abcde/cache/[^/]*' -print
を試すと、
Permission denied
となってしまいます。なぜでしょうか?
Permission deniedのとことろで引っかかっているのでしょうか?
ちなみに、
find -regex '.*/abcde/cache/[^/]*'
とやると、自分の期待したファイル結果を表示することができたのですが、この書き方では、crontabに書けないでしょうか?

▼2
>abcdeの下ってそういう意味でしたか。
皆さんのアドバイスで共通していたのが、
find で /abcde 以下の cache ディレクトリをみつけるだけなら
find /abcde -name cache

ググッてみても、aディレクトリ以下を探す
find /a
みたいな書き方をされていたのですが、
今回のケースで、この書き方では、なぜ期待通りの結果が得られないのでしょうか?
今後の参考までに教えていただければ、幸いです。

補足日時:2010/01/30 02:39
    • good
    • 0
この回答へのお礼

▼1.について
find . -type f -regex '.*/abcde/cache/[^/]*' -print

今、念のためもう一度試したら、望みどおりの結果がちゃんと表示されました。ちゃんと確かめてから投稿したつもりだったのですが...。申し訳ありません........。

お礼日時:2010/01/30 02:59

find で /abcde 以下の cache ディレクトリを全部みつけるだけなら


find /abcde -name cache
で OK.
あと, 「うまくいきません」というときには何がどう「うまくいかない」のかをちゃんと書いてください. どういう状況で何が得られることを期待して, 実際にはどんな結果になったのか, ですね.

この回答への補足

■find . -name "cache"を試すと、下記が表示されます
./public_html/rails/modules/abcde/cache
./public_html/ruby/modules/wiki/private/cache
./net/cache
./n/abcde/cache
 :
以下略

■この例でいくと、期待しているのは、下記二つを検出したいのですが、
./public_html/rails/modules/abcde/cache
./n/abcde/cache

■find /abcde -name cacheを実行すると、下記結果となります
find: /abcde: No such file or director

補足日時:2010/01/30 01:39
    • good
    • 0

まず訂正です


>-ctime -1
これは1日以内でした。1日以上は+1です。

>「cache」フォルダだけを探すと、削除したくないファルダもあるので、/「abcde」フォルダ以下の「cache」フォルダ内のファイルだけを削除したいのですが、そんなことはできるのでしょうか。

/abcde の下の深いところにcacheフォルダがあって、その直下のファイルを消したい、ということでしょうか
cacheフォルダの中の深いところまで辿ってファイルを消したい、ということでしょうか

/abcdeから開始するので
find /abcde
ファイルなので
-type f
1日以上前を作成日で判断するなら
-ctime +1
変更日で判断するなら
-mtime +1

肝心のファイル名の判定ですが, -regexを使って書けると思います。
cache直下なら、cache/の後に/が無いはずなので
-regex '.*/cache/[^/]*'
cache以下なら、/を含めて任意の文字が来るので
-regex '.*/cache/.*'

まずは、-printで期待通りのファイルが表示されるか、確認してみましょう

この回答への補足

まずファイル表示からやってみたのですが、
うまくいきません。下記のどこがいけないのでしょうか?
find /abcde -type f -regex '.*/cache/[^/]*' -print

補足日時:2010/01/29 22:20
    • good
    • 0

find /abcde/cache/* -type -mtime +1 -exec /usr/bin/rm -f {} \;

この回答への補足

find: invalid argument `-mtime' to `-type'となります。

補足日時:2010/01/29 22:16
    • good
    • 0

find で /abcde 以下の cache ディレクトリを全部みつけ, xargs で再度 find する.


削除は find の -exec を使ってもいいしさらに xargs でも OK.

この回答への補足

>find で /abcde 以下の cache ディレクトリを全部みつけ
もし、ご存知でしたら、この方法を教えてください。

補足日時:2010/01/29 22:15
    • good
    • 0

man find でfindのオプションを確認できます。



step0
abcdeの深さは一緒でしょうか? a/cache b/c/cache 等と深さも変わるのでしょうか?
深さが一緒なら、開始ディレクトリは複数指定可能なので
find */cache
という感じで指定できます。

step1/step2
全部消すのですか?1日以上前を消すのですか?
-type f でファイルを対象とできます。
-ctime -1 で 1日以上前に作成されたファイルを指定できます。

step3
crontabを使いましょう。
詳細はcrontabで検索してください
注意点としては、相対パスは使わない(findではなく/usr/bin/find等)ことでしょうか

参考URL:http://www.linux.or.jp/JM/html/GNU_findutils/man … http://www.linux.or.jp/JM/html/cron/man1/crontab …

この回答への補足

ご回答ありがとうございます。


>abcdeの深さは一緒でしょうか? a/cache b/c/cache 等と深さも変わるのでしょうか?

深さは違います。

<補足>
「cache」フォルダだけを探すと、削除したくないファルダもあるので、/「abcde」フォルダ以下の「cache」フォルダ内のファイルだけを削除したいのですが、そんなことはできるのでしょうか。
※「abcde」フォルダ以下の「cache」フォルダは、異なる階層に、複数存在しています。

補足日時:2010/01/29 12:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!