リモートシステム(私は管理者ではありません)でTMPDIR
「.profile」に代替を設定しました(システムのデフォルトスペースが非常に制限されているため)。
TMPDIR
もちろん、この選択肢は再起動時に消去されません。そのため、定期的に(またはログイン時に)ディレクトリを消去したいと思います。ただし、ログインしていない状態では長時間実行されるスクリプトを使用して何度もログインすることがあり、rm
実際にはすべて選択することはできません。
bash
最新のリブート前の特定のディレクトリでファイルを見つけて整理する方法(好ましくは一般的なツールを使用できます)はありますかTMPDIR
?
答え1
Thomasの答えと同じですが、/proc/statのbtimeフィールドを使用して開始時間を見つけるより簡単な方法
$ DT=$(awk '$1 ~ /btime/ { print "print scalar localtime("$2")" }' /proc/stat|perl)
$ echo $DT
Fri Nov 13 15:04:28 2015
$ last reboot|head -1
reboot system boot 3.16.0-4-amd64 Fri Nov 13 15:04 - 22:53 (5+07:49)
$ touch -d "$DT" /tmp/foo
-newerオプションでfindを使用してください。
答え2
この単純な行は、TMPDIR
最後の再起動前に変更されたすべてのファイルとディレクトリを削除するのに役立ちます。
$ find $TMPDIR -mindepth 1 -depth -not -newermt "$(uptime -s)" -delete
お使いのコンピュータはこの機能をサポートする必要があり、この機能を機能させるにはオプションがuptime -s
必要です。find
-newerXY
これは、(t)タイムスタンプ(この場合は出力)を参照してから(m)変更されたファイルとディレクトリを見つけるための-newermt
特別な形式です。-newerXY
uptime -s
よりfind
手動詳細-newerXY
。
変更されたファイルを見つけるには、-not
逆検索を使用してください。-newermt
今後または、最後の再起動後ではなく、まさに最後の再起動の時点で。
-depth
ディレクトリ自体よりもディレクトリの内容を処理することに興味があります(再帰削除に重要)。
-mindepth 1
TMPDIR
ディレクトリ自体が保存されていることを確認してください。
欲しいならリストそのファイルを削除する代わりに-delete
。
リストしたい場合そして削除するには追加するだけです-printf "%p\n" -delete
。
答え3
このコメントはuptime -s
最近登場しました(Linux固有のコードに表示されます)。2012年末)。
last
システムブートタイムスタンプを一覧表示する出力を使用する方が移植性が高い場合があります。
tom pts/0 michener.jexium- Wed Nov 18 17:00 still logged in
reboot system boot 3.2.0-4-amd64 Wed Nov 18 16:47 - 20:36 (03:49)
tom pts/0 michener.jexium- Wed Nov 18 04:12 - down (01:21)
reboot system boot 3.2.0-4-amd64 Wed Nov 18 04:04 - 05:33 (01:29)
tom pts/0 michener.jexium- Tue Nov 17 17:03 - down (04:24)
そして、(grepまたはawkを使用して)最新の「restart」行のタイムスタンプを取得し、次を使用します。それtouch
たとえば、パラメータとして
LAST=$(last | grep -E '^reboot ' | sed -e 's/^.\{39\}//' -e 's/\(.\{16\}\).*/\1/' | head -n 1)
-newer
これにより、次のオプションが提供されます。find
、そして一日の数分で再起動時間を完了します。
FILE=/tmp/foo
touch -d "$LAST" $FILE
find $MY_TMPDIR ! -newer $FILE -exec echo rm -rf {} \;
もちろん、弱点は次の形式を理解することです。last
出力(ただし標準はありませんそれ)。
答え4
uptime
以下は、出力を解析し、開始から合計時間(分)を計算し、数分前に変更されたファイルを見つけるスクリプトです。私はこれをFreeBSD 10.2、Debian Jessie 8、Ubuntu Trusty 14.04でテストしました。uptime
他のシステムの出力形式についてはわかりません。
その中核には、他のコマンドで使用するために、および稼働時間(分)を知る必要がある状況でコマンドファイルに別々に配置できる関数awk
内のスクリプトがあります(最大1分以内)。uptime_minutes
find
ファイルに保存して実行します。sh filename directory ...
ここでは、filename
スクリプト用に選択した名前、およびdirectory
検索したいディレクトリです。
#!/bin/sh
uptime_minutes() {
uptime |
awk '
{
for (i=1; i<=NF; i++) {
if ($i == "up") {
split($(i+3), hhmm, "[:,]")
print ($(i+1) * 24 * 60) + (hhmm[1] * 60) + hhmm[2]
exit
}
}
}
'
}
find "${@:?}" -mmin +$(uptime_minutes) # -exec rm {} \;
"${@:?}"
ディレクトリパラメータを指定しないと、エラーで印刷されます。
ファイル削除コードは最後にコメントアウトされています。#
ファイル名を印刷するのではなく、実際にファイルを削除したい場合は削除してください。