シェルにて「abc.0101171109(.以降は年月日時分)」
というようなログファイルを一日3回、作成しています。
これを一週間、または一ヶ月たったら
自動的に削除するにはどうすればよいでしょうか。

OSはSolaris2.6で、
シェルはBでもCでも何でもかまいませんのでよろしくお願い致します。

A 回答 (4件)

findで条件を並べて書けばANDになるので-nameでファイルを制限すれば良いのではないでしょうか?



paz777さんの例に追加してます。
find {directory} -name abc.\[0-9\]\* -mtime +7 -exec rm -r {} \;

もちろん-nameあとの部分は希望のファイル名に合わせてください。

FreeBSD 4.2-RELEASEとUnixware7で動作確認してます。
    • good
    • 0

すいません。

再登場です。
h_hikitaさんの回答を見て、自分の回答が
「やばい」ことに気付きました。
σ(^^)の回答をそのまま実行すると、対象とならない
別のファイルまで削除してしまいます。

一応、ディレクトリ内には対象のログファイルしか
ない場合が前提になります。(^^;

すいませんでした。
「自信なし」に変更!!!
    • good
    • 0

こんにちは。


UNIXコマンドのfindで対応できないでしょうか?

find {directory} -mtime +7 -exec rm -r {} \;
こんな形です。(最後の[;]も必要です)
{directory}には、対象ディレクトリを指定して下さい。
[+7]が更新日になります。
1週間であれば[+7]、1ヶ月であれば[+30]ってな感じ
です。

ではでは・・・
    • good
    • 0

GNU Shell utilities のなかにあるdateコマンドをインストールして



find . -not -newer `date '1 month ago' '+abc.%y%m%d0000'` -exec rm {} \; -print

とかではどうでしょうか?

あとは、atかcronでこれを定期的に実行する。

# サブディレクトリがない&同じディレクトリにはログファイル以外のファイルがないというのが前提です。

この回答への補足

すばやい回答ありがとうございます。
せっかくのご回答ですが、
インストールは行うことができないので、
できればインストールを行わずに、
シェルだけで何とかできないでしょうか?

補足日時:2001/01/17 12:55
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qレッドハットのバージョン確認方法

自分のサーバで使用しているREDHATのバージョン確認はどうすればいいのでしょうか?

more /etc/issue
とやっても英文しか出てきませんでした。

uname -all
でもカーネルのバージョンは出るのですが、REDHATのバージョンは出ませんでした。

Aベストアンサー

> more /etc/issue
> とやっても英文しか出てきませんでした。

その英文にはRedHatのバージョンは書いてなかったのですか?
書いていなかったとしたら、管理者により編集されている可能性
がありますね。

cat /etc/redhat-release

ではいかがでしょう?
やっぱり英文ですけど。

rpm -q redhat-release

でもいいかも

Q作成してから一定期間経過したファイルを自動的に削除するコマンド

こんにちは。
LinuxのPCのsambaで共有したフォルダにTVチューナボードで録画したmpegファイルを保存しています。

録画しても結局見ない事もありまして、例えば録画して(mpegファイルが作成されて)から1週間経過したら拡張子.mpgのファイルを自動的に削除~

の様なことができると定期的にHDDの残り容量を調べてmpegファイルを手動削除、としなくてすむので便利だなと思うのですが、

・特定のフォルダの中の
・特定の種類の拡張子を(この場合はmpegファイル、.mpg)
・ファイルの作成日から一定期間経過したら(例えば1週間、720時間)
・自動的に削除(コマンドをcronに登録するような)

するような方法ご存じでしたらアドバイス頂けると助かります。

現在は rm -f /var/samba/*.mpg としてsambaフォルダの中の拡張子.mpgを全部削除、としてますが、これを例えば720時間(1週間)経過したもの、という条件をさらに追加するようなことは可能でしょうか?

Aベストアンサー

find を使えばいいんじゃありませんか?
たとえば1週間以前の .mpg を消すなら
find -name '*.mpg' -mtime +7 -exec rm {} \;

Qシェルスクリプトの実行、「source」と「.」の違いについて

bashのシェルスクリプトを書いています。
当方、Mac Snow Leopard を使っているため、seq コマンドがデフォルトでは使えません。
そこで、.bashrc 内に、seq 関数をあらかじめ自分で定義して、他で使い回したいと思っています。
.bashrc の中に、
function seq() {
i=$1
while [ $i -le $2 ] ; do
echo $i
let i=$i+1
done
}
と、関数を定義しました。
seq 関数をターミナル上で実行すると、
>seq 0 2
0
1
2
と正しく、表示されます。次に、

#!/bin/sh
seq 0 2

と記述したシェルスクリプト(temp.sh)を「source」で実行すると、
>source temp.sh
0
1
2
と正しく、表示されますが、「.」で実行すると、
>./temp.sh
./temp.sh: line 2: seq: command not found
と言われます。
どのような理由によってこの違いが出るのでしょうか??

bashのシェルスクリプトを書いています。
当方、Mac Snow Leopard を使っているため、seq コマンドがデフォルトでは使えません。
そこで、.bashrc 内に、seq 関数をあらかじめ自分で定義して、他で使い回したいと思っています。
.bashrc の中に、
function seq() {
i=$1
while [ $i -le $2 ] ; do
echo $i
let i=$i+1
done
}
と、関数を定義しました。
seq 関数をターミナル上で実行すると、
>seq 0 2
0
1
2
と正しく、表示されます。次に、

#!/bin/sh
seq 0 2

...続きを読む

Aベストアンサー

追記

source は現在のシェルで実行し、結果がそのまま現在のシェルに適応されます。
今回の temp.sh なら
> source temp.sh

> seq 0 2
と入力したのと同等ということになります。

> ./temp.sh
この . はコマンドではなく、 temp.shへのパスを指定するものです。
実行ファイル名だけでコマンドとして実行できるのは、環境変数PATHで指定したディレクトリにあるものだけです。それ以外は、その実行ファイルへの絶対パス、または相対パスが必要となります。
これは、カレントディレクトリにある実行ファイルも例外ではありません。
環境変数PATHに . が無い場合は、 ./ファイル名 と相対パスを指定する必要があります。
(この点は、常に . がPATHにあるように振る舞うMS-DOSやコマンドプロンプトとは違います)
逆に、PATH上にあれば(例えば、 PATH=$HOME/bin:(以下略)となっている時の $HOME/bin )、 temp.sh とファイル名だけで実行できます。

また、こうしたコマンドは新規プロセスで実行されますので、環境変数を除いて、現在の設定は継承されません。
対話的ではないbashや、 shとして起動された bash は .bashrcを読まないので、そこに書いてあることは無効となります。

追記

source は現在のシェルで実行し、結果がそのまま現在のシェルに適応されます。
今回の temp.sh なら
> source temp.sh

> seq 0 2
と入力したのと同等ということになります。

> ./temp.sh
この . はコマンドではなく、 temp.shへのパスを指定するものです。
実行ファイル名だけでコマンドとして実行できるのは、環境変数PATHで指定したディレクトリにあるものだけです。それ以外は、その実行ファイルへの絶対パス、または相対パスが必要となります。
これは、カレントディレクトリにある実行...続きを読む

Qシェルスクリプトでファイル削除したい

シェルスクリプト初心者です
今回、Linuxサーバ側にある複数のファイルを削除する
必要が出てきました
このため、シェルスクリプトを書いて複数(2000程度)
のファイルを削除しようとして試験をしています
試験のLinuxサーバ側の/root の中にfile1,file2・・・
等々を置いています
そこに次のようなスクリプトを記載して
ファイルが置かれている場所と同じ/rootに置いて実行させるのですが

************** スクリプト ********
#!/bin/sh
echo "start"
#
#
rm F1010002.JPG
rm F1010003.JPG
rm F1010004.JPG
echo "end"

******************************



下記のようなエラーが出ます
******************************************
start
rm: cannot lstat `F1010002.JPG\r': そのようなファイルやディレクトリはありません
rm: cannot lstat `F1010003.JPG\r': そのようなファイルやディレクトリはありません
rm: cannot lstat `F1010004.JPG\r': そのようなファイルやディレクトリはありません
end
******************************************

サーバ側にSSHで入って、
# rm F1010002.JPG
とひとつひとつ打鍵していくとファイルは削除されます

スクリプトの間違い等あるのでしょうか
教えていただければ幸いです

なお、ファイル数2000件程度のスクリプトを記載する方法は
別のソフトを利用して作成できるので・・・その件はいいのですが・・・

シェルスクリプト初心者です
今回、Linuxサーバ側にある複数のファイルを削除する
必要が出てきました
このため、シェルスクリプトを書いて複数(2000程度)
のファイルを削除しようとして試験をしています
試験のLinuxサーバ側の/root の中にfile1,file2・・・
等々を置いています
そこに次のようなスクリプトを記載して
ファイルが置かれている場所と同じ/rootに置いて実行させるのですが

************** スクリプト ********
#!/bin/sh
echo "start"
#
#
rm F1010002.JPG
rm F1010003.JPG
rm F1010004.JPG
e...続きを読む

Aベストアンサー

`F1010002.JPG\r' ってファイル名の後ろに CR コードが付いていることになってますよ。
シェルスクリプトはWindowsのPCで作成してからFTPでアップロードしてませんか?
ファイルの改行コードを CR+LF から LF に変えてアップロードし直してみてください。


人気Q&Aランキング