- PR -

findのオプションで-lsをつけるとディレクトリの場合エラーコードが返る

1
投稿者投稿内容
noku
常連さん
会議室デビュー日: 2005/07/21
投稿数: 20
投稿日時: 2006-06-08 17:19
findのオプションでディレクトリが何日以上たったらそのディレクトリを削除する
スクリプトを作っているのですが

他人が以前作ったものをベースというよりも、それに似せようと思い作りこんでいますが
前回はファイルのみだったのですが、今回はディレクトリ以下も削除するスクリプトの作成を頼まれました。

それで本題ですが

削除のソースの実行部はこう書いています。

find "$rm_cache_path" -name "$rm_chche_name" -type d -mtime "$days" -ls -exec rm -fr {} \; >> $CACHE_RM_LOG

変数で表記してあるのでわかりにくいですが
分かりやすく書きます。

find . -name ???? -type d -mtime +0 -ls -exec rm -fr {} \;

こんな感じをデバックで試していますが、どうもディレクトリ削除だと上手くいきません。
正しくはディレクトリは削除されるけど、エラーで返ります。
リターンコードですが

------------------------------
53342 4 drwxr-xr-x 2 root system 512 Jun 8 16:45 /*/*/*/*/pokh
find: 0652-081 ディレクトリを </*/*/*/*/pokh> に変更できません。
: このパス名のファイルまたはディレクトリは存在しません。
------------------------------
※ディレクトリの名前は"*"で置き換えました。

と返ってきます。


これを"-type"の指定を"-type f"のファイルにすると、リターンコードもキレイに上手くいきます。

何故"-ls"をつけるかというと、前の人がログを実行と同時にリダイレクトに書きこんでいました。
この処理を分ければログとディレクトリ削除は上手くいくんですが
なるべく現行のまま出来たらなと思い、皆さんにご質問しました。

自分なりに"xargs"や"-exec"を";"で繋いだり工夫してみましたが上手くいきませんでした。

環境はAIX5.1です。
よろしくおねがいします。









[ メッセージ編集済み 編集者: noku 編集日時 2006-06-08 17:30 ]

[ メッセージ編集済み 編集者: noku 編集日時 2006-06-08 17:31 ]
水都
大ベテラン
会議室デビュー日: 2004/07/22
投稿数: 111
投稿日時: 2006-06-08 20:07
引用:

nokuさんの書き込み (2006-06-08 17:19) より:
こんな感じをデバックで試していますが、どうもディレクトリ削除だと上手くいきません。
正しくはディレクトリは削除されるけど、エラーで返ります。
リターンコードですが

------------------------------
53342 4 drwxr-xr-x 2 root system 512 Jun 8 16:45 /*/*/*/*/pokh
find: 0652-081 ディレクトリを </*/*/*/*/pokh> に変更できません。
: このパス名のファイルまたはディレクトリは存在しません。
------------------------------
※ディレクトリの名前は"*"で置き換えました。

と返ってきます。


これを"-type"の指定を"-type f"のファイルにすると、リターンコードもキレイに上手くいきます。


えー、疑問なのですが
「正しくはディレクトリは削除されるけど、エラーで返ります。」
「このパス名のファイルまたはディレクトリは存在しません。」
というのは、親ディレクトリを削除したからその中にある子ディレクトリが存在しないというのではないのですか?
1

スキルアップ/キャリアアップ(JOB@IT)