回答:
あなたはないfind
持っている-mmin
オプションは?これにより、最後の変更以降の分数をテストできます。
find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete
または多分tmpwatch
同じ仕事をするために使用することを見てください。phjrもtmpreaper
コメントで推奨されています。
$LOCATION
と、$REQUIRED_FILES
両方のような複数の値持つことができますdir1 dir2
とは*.txt *.tmp
?
このトリックには、1時間前にファイルを作成し、-newer file
引数を使用します。
(またはtouch -t
、そのようなファイルを作成するために使用します)。
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
ファイルtest
を作成します。
これは私のために働いたアプローチです(そして私はそれが上記で使用されているのを見ません)
$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null
フォルダーを残したまま、59分より古いすべてのファイルを削除します。
'*.*'
か、シェルがそれfind
を解決するためのワイルドカードとして保持するのではなく、実際のファイル名に展開します。これによりfind
、サブディレクトリに対するの再帰的な操作が中断されます。
-name '*.*'
などの拡張子を持っていないファイルの削除、しませんREADME
、Makefile
など、
SunOS 5.10の場合
Example 6 Selecting a File Using 24-hour Mode
The descriptions of -atime, -ctime, and -mtime use the ter-
minology n ``24-hour periods''. For example, a file accessed
at 23:59 is selected by:
example% find . -atime -1 -print
at 00:01 the next day (less than 24 hours later, not more
than one day ago). The midnight boundary between days has no
effect on the 24-hour calculation.
お使いのバージョンの「find」に「-mmin」がない場合、「-mtime -0.041667」は「過去1時間以内」にかなり近くなるため、次のように使用します。
-mtime +(X * 0.041667)
したがって、Xが6時間を意味する場合、次のようになります。
find . -mtime +0.25 -ls
24時間* 0.25 = 6時間なので機能します
@iconoclastが別の回答に対するコメントで疑問に思っていた方法を実行するためにできることは、次のとおりです。
ユーザーまたはの/etc/crontab
ファイルを作成するにはcrontabを使用します/tmp/hour
。
# m h dom mon dow user command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1
次に、これを使用してコマンドを実行します。
find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
*/1
毎時はあなたのcrontabで冗長です。時間フィールドに*を入れるのと同じです。
1つのは場合はfind
持っていない-mmin
と1もにこだわっている場合find
のみの値の整数受け入れること-mtime
、そして全て必ずしも1が「より古い」は「より新しくない」と類似していることを考えれば失われることはありません。
カットオフタイムのmtimeを持つファイルを作成できた場合はfind
、参照ファイルより「新しくない」ファイルを見つけるように要求できます。
適切なタイムスタンプが付いたファイルを作成するのは少し複雑です。適切なシステムがない場合は、find
おそらく以下のdate
ようなことを実行できるコマンドが実行可能ではないためです date +%Y%m%d%H%M%S -d "6 hours ago"
。
幸いなことに、より扱いにくい方法ではありますが、これを管理できる他の古いツール。
6時間は21600秒であると考えてください。有用な形式で6時間前の時刻を検索します。
$ date && perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'
> Thu Apr 16 04:50:57 CDT 2020
202004152250.57
perlステートメントは有用な日付を生成しましたが、より適切に使用する必要があります。
$ date && touch -t `perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", \
$d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'` ref_file && ls -l ref_file
Thu Apr 16 04:53:54 CDT 2020
-rw-rw-rw- 1 root sys 0 Apr 15 22:53 ref_file
現在、この古いUNIXのソリューションは次のようなものです。
$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;
また、参照ファイルをクリーンアップすることもお勧めします...
$ rm -f ref_file