UNIXで以下の仕様を持つシェルスクリプトを作成しようと
していますが、どうもうまくいきません。
どなたか、いい知恵を貸していただけないでしょうか?

目的:
特定のディレクトリ内にあるファイルについて、
システム日付より3日前のタイムスタンプを持つファイルを
削除する。

留意点:
・削除対象のファイルは複数存在する場合がある。
・ファイルサイズは1件あたり 0byte-数百Mbyte となる
 可能性がある。
・ファイル名は不定。
・スクリプトはBシェルまたはCシェルとする。

参考:
・現在使用しているOSについて
 ls -l でのタイムスタンプにおける出力形式は以下のとおり
 (デフォルト値?)
 ・ 9月 28日 2000年    または
  10月 24日 10時45分

知っている限りのコマンドを使っていろいろやってみたんですが、
結局ダメでした。
よろしくお願いします。

A 回答 (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をどうぞ。
    • good
    • 0
この回答へのお礼

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

ありがとうございました。大変助かりました。

お礼日時:2001/03/28 12:04

なんでスクリプトが必要かな。



find directory -mtime +3 -exec rm {} \;
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/03/28 12:07

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

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

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

ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。

当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・

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

ディレクトリ内のファイルで、日付が最も古い&(且つ)サイズが小さいものを削除するシェルを作成しようと考えています。

当初の以下のような考えをしていましたが、うまくいかないので質問しました・・・

ls -lStr(カレントディレクトリで日付が古くサイズが小さい順のつもり・・・)

上記のコマンド実行にて、
合計 100
-rwxr-xr-x 1 root root 333 2月 22 2009 java.log

と表示されるのを利用し、上から2行目のファイル名を取得するためawkして『java.log』というファイル名をprintfで表示させ変数か何か...続きを読む

Aベストアンサー

「最も古い&(且つ)サイズが小さいもの」は、ちょっと意味が不明です。両方の条件が成り立つとはかぎりません。
「最古だけどファイルサイズが最小ではないもの」
「最古ではないけどファイルサイズは最小のもの」
の2つのファイルがある場合、どちらが削除対象ですか?

「最小ではなくても、とにかく最古」が対象なら、ls -tr
「最古ではなくても、とにかく最小」が対象なら、ls -Sr

になるでしょう。

あと、lsのソート順オプションが決まったとして、その一覧の先頭に来ているファイルを削除する方法についてですが、
ls に-l オプションを付ける必要はないでしょう。
-lオプションなしならファイル名だけが表示されますから、それがそのまま削除対象として使えます。

あとは、head コマンドを使って

ls -tr | head -1

で、lsの結果の先頭1行だけが表示されますから、

rm `ls -tr | head -1`

とすれば、そのファイルだけが削除されます。
(これは、最古の1ファイルを削除する例になります)

Q一番古い更新日付をチェックする

OS:RedHatLinuxES3.0
下記についてご存知お方がいらっしゃいましたら教えてください。

[file.log]と言うファイルがあります。
このファイルは、5MBになると、5MBに達した時の、年月日時分秒を付けたファイル名[file-YYYY_MM_DD-hh_mm_ss.log]になります。
また、このファイルは5世代管理とするので、[file.log]が一つ、残り4つは[file-YYYY_MM_DD-hh_mm_ss.log]となります。

そこで、質問ですが、この5つのファイルの中で一番古い更新日付を持つファイルのみを他のディレクトリにコピーしようと思っています。
つまり、[file-YYYY_MM_DD-hh_mm_ss.log]ファイル名の一番古い日付を持つファイルを選択したいのですが、いい方法がありましたら教えて下さい。

Aベストアンサー

ls -1 -t | head -1
で一番古いファイルをピックアップするのでできそうな気はします。
たとえば
cp `ls -1 -t *.log | head -1` OLDlogs/
みたいな感じで。

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リンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい


人気Q&Aランキング