シェルスクリプトで古いファイルの自動削除方法とは?

このQ&Aのポイント
  • UNIXで特定のディレクトリ内のファイルについて、システム日付より3日前のタイムスタンプを持つファイルを削除するためのシェルスクリプトの作成方法を解説します。
  • 削除対象のファイルは複数存在し、サイズは0byteから数百Mbyteまでの可能性があります。ファイル名は不定です。シェルスクリプトはBシェルまたはCシェルを使用します。
  • lsコマンドのタイムスタンプの出力形式や既存のコマンドを試したがうまくいかなかったため、解決策を模索しています。
回答を見る
  • ベストアンサー

シェルスクリプトで古いファイルの自動削除をするには?

UNIXで以下の仕様を持つシェルスクリプトを作成しようと していますが、どうもうまくいきません。 どなたか、いい知恵を貸していただけないでしょうか? 目的: 特定のディレクトリ内にあるファイルについて、 システム日付より3日前のタイムスタンプを持つファイルを 削除する。 留意点: ・削除対象のファイルは複数存在する場合がある。 ・ファイルサイズは1件あたり 0byte-数百Mbyte となる  可能性がある。 ・ファイル名は不定。 ・スクリプトはBシェルまたはCシェルとする。 参考: ・現在使用しているOSについて  ls -l でのタイムスタンプにおける出力形式は以下のとおり  (デフォルト値?)  ・ 9月 28日 2000年    または   10月 24日 10時45分 知っている限りのコマンドを使っていろいろやってみたんですが、 結局ダメでした。 よろしくお願いします。

  • chaff
  • お礼率92% (78/84)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

-type fも必要でした。 find somedir -type f -mtime +3 -exec rm {} \; でいきましょう。 とりあえず、テストは find somedir -type f -mtime +3 -print でちゃんと該当するファイルが表示されるれば-exec rm {} \;にしても大丈夫。 日付まで確認したければ、 find mydir -type f -mtime +3 -exec ls -la {} \; 詳しくは、find(1)のmanをどうぞ。

chaff
質問者

お礼

ありがとうございます。 findで抽出可能とは知りませんでした。 なりほどぉ。-mtime ですか!! ありがとうございました。大変助かりました。

その他の回答 (1)

回答No.1

なんでスクリプトが必要かな。 find directory -mtime +3 -exec rm {} \;

chaff
質問者

お礼

>なんでスクリプトが必要かな。 その通りですね。find っていろいろできるんですねー

関連するQ&A

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

    シェルスクリプト初心者です 今回、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件程度のスクリプトを記載する方法は 別のソフトを利用して作成できるので・・・その件はいいのですが・・・

  • シェルスクリプトでファイルの解凍と削除の繰り返し

    皆様、宜しくお願いいたします。 シェルスクリプト初心者です。 今回、負荷テストを実施するにあたり、NFSでマウントしたディレクトリで10_Recommeded.zipファイルの解凍し、解凍してできたファイルを削除をする動作を複数回 or 一週間繰り返したいと考えております。そこで、シェルスクリプト作成したいのですが、作成に大変悩んでいます。どうかご教授いただけますでしょうか。

  • シェルスクリプト内のcdで、カレントディレクトリを変えるには?

    シェルスクリプト内のcdコマンドで、カレントディレクトリを変えるにはどうしたらいいか?をどうか教えて下さい。 MS-DOSのバッチファイル内で"cd XXXXX"と書き実行した時の動作を、UNIX(CygWin)環境でも行いたいです。 が、シェルスクリプトは(サブシェルで動く為)カレントディレクトリが変わってくれません。aliasコマンド等でいろいろ実験しましたが、DOSバッチファイルのように「バッチファイル単体でディレクトリ移動が出来る方法」を探し出せませんでした。 極めて初歩的とは存じますが、どうか宜しくお願い致します。

  • シェルスクリプト ファイル一括出力

    現在、ubuntu/linuxを使用しています。 あるディレクトリ以下のファイル名と内容を全て出力するシェルスクリプトを作りたいです。例えば、 /home/web/以下aa.phpとbb.phpとcc.phpのファイルがあるとします。(実際は、20ファイル程度あります) これをall.txtに aa.php←ファイル名 ・・・←aa.phpの内容 bb.php←ファイル名 ・・・←bb.phpの内容 cc.php←ファイル名 ・・・←cc.phpの内容 とファイル名とファイルの内容を順次結合させるにはどういうシェルスクリプトを作成すればよろしいでしょうか?できれば、for文などで動的に繰り返し制御を行えたら一番うれしいです。今までは、lsやcat文で一行づつ記述していましたが、さすがにファイル数が増えると面倒になりました。 追伸 何がやりたいかというと自分のサイトのソースを全部1ファイルにまとめて、pdfや印刷をしたいです。欲をいうとサブディレクトリまで検索して結合できると一番うれしいのですが・・・(まだディレクトリ数は少ないのでなんとかなります)

  • シェルスクリプトの作り方

    OSはVineで、bashシェルです。 シェルスクリプトの作り方ですが、 1.ファイルを作る。 例えば、 #!bin/sh cd tmp このとき、ディレクトリはどこでもいいのでしょうか? 2.権限を付ける。 chmod u+x filename 3.実行 ./filename 他に気をつけることはないでしょうか? 実行すると、 bash: ./filename: bad interpreter: そのようなファイルやディレクトリはありません となってしまって、どうしても実行できません。

  • 【シェル】日付が最も古くサイズが小さいファイル削除

    ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。 当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・ ls -lStr(カレントディレクトリで日付が古くサイズが小さい順のつもり・・・) 上記のコマンド実行にて、 合計 100 -rwxr-xr-x 1 root root 333 2月 22 2009 java.log と表示されるのを利用し、上から2行目のファイル名を取得するためawkして『java.log』というファイル名をprintfで表示させ変数か何かに格納し、rmコマンドで削除という流れを考えていました。 よくよく考えると ・ls -lStr は本当に日付が古くサイズが小さいものでソートされているのか ・lsコマンドで表示した『2行目』という指定でファイル名の取得できるのか がよくわからなくなってしまいました。 上記の考え方よりこっちのほうが良い!やアドバイスがあれば非常に嬉しいです。 よろしくお願いしますm(__)m

  • Linux シェルスクリプト

    シェルスクリプト作成の今後の参考にしたいので 以下のスクリプトを1つでも良いので作成してみてください。 1、sono1.sh $ ./sono1 ファイル名 で、 ファイルを削除せずにあるフォルダ(例えば .box1)に移動させるスクリプト。 ただ、すでに .box1 に同名のファイルがあった場合には上書きせず、既 存のファイル、新しいファイル両方を .box1 内に保存できるようにしてください。 2、sono2.sh $ ./sono2 拡張子 で、.box2 というフォルダにあるファイルの内, 指定された拡張子をもつファイル名だけを表示するスクリプト。 3、sono3.sh 現在のディレクトリにあるファイルのうち、texファイルから生成されたフ ァイル (*.log, *.aux, *.dvi )を削除するスクリプト。 ただし、texファイルが存在しないものについては削除しない。 つまり、 333.tex 333.aux 333.dvi aaa.log が存在する場合、削除するのは 333.aux と 333.dvi だけ.

  • シェルスクリプトで「ディレクトリが存在したら~する」の表現は?

    unixのシェルについて質問です。 「ディレクトリaaa配下に任意のディレクトリ(ファイルではなく何かしらのディレクトリ)が在ったらpwdする」 という条件式はどう書いたらよいのでしょうか? イメージとしては以下しか浮ばないんですが間違ってますよね… すみません、よろしくお願いいたします。 if [ -d aaa/*] then  pwd fi

  • Linux シェルスクリプト

    シェルスクリプトを作る際に、汎用スクリプトを作るのが上手くいきません。 例として以下の2つのシェルの作成例を教えてください。 1、スクリプト名をrei1として platex T1.tex dvipdfmx T1.dvi xdvi T1.dvi & wc -c T1.tex T1.dvi T1.pdf ではT1.tex専用なので これを $ ./rei1.sh ファイル名 と打ちこむことでどのファイルにでも適応できるようにする 2、スクリプト名をrei2.shとして 後から指定した文字列を含む (例えばaak ak aab aba naaの5つがあった時、「aa」と指定することでaak,aab,naaの3つを選ぶ) ファイルを選び出し、それを指定したディレクトリ(このディレクトリも可能なら後から指定したい) に移動する。という動作をするシェルスクリプト。

  • UNIXのシェルスクリプト

    UNIXのシェルスクリプトで以下のようなことをやりたいのですがいい方法を教えて下さい。 ファイルの中にある文字列があります。 たとえば”CURREND_DIR” この文字列をシェルスクリプトでカレントのディレクトリパスに変換したいのですが いい方法が思いつきません。 set dir_data = ‘pwd‘ sed -e ’s/CURRENT_DIR/$dir_data’ ファイル名 でできるかなと思ったのですが、”CURRENT_DIR”が”$dir_data”に置換されてしまいます。 さらにdirパスが”/”で区切られていることも問題のようです。