No.3ベストアンサー
- 回答日時:
補足をふまえて。
こんな感じにしてみては:
(1)緊急退避用ディレクトリをmkdir。ディレクトリ名はタイムスタンプやpidなどを含んだものにして一意性を確保する。mktempを使うと楽。
(2)ls -1rtでファイルの一覧(古い順)を取得。一覧の先頭からチェックして、特定の名前だったりディレクトリだったりした場合は対象外として、適合するのものが見つかったら、それを緊急退避用ディレクトリにmv。
(3)ディスク使用率が閾値以下になるまで(2)を繰り返し。
(4)緊急退避用ディレクトリをtar cvfzでアーカイブ。
(5)緊急退避用ディレクトリをrm -r。
・緊急度が高そうなので、圧縮も後回し。
・別フォルダに退避させて、競合を回避。
・フォルダ単位で一括処理して、ファイルをまとめて処理。
――というところで。
同時に動いてる退避プロセスのほうがこけたりして。
> 実際移動されたファイルは上から3つ目ということしかわかっていませんのでファイル名まではわからないのです。
これって、「ls -tr -1 $SRCDIRS/*」と元のディレクトリ名がくっついてるのが悪さしているってことなら、事前にcd $SRCDIRSして、lsしてみては。ファイル名だけが取得できるようになります。
>これって、「ls -tr -1 $SRCDIRS/*」と元のディレクトリ名がくっついてるのが悪さしているってことなら、事前にcd $SRCDIRSして、lsしてみては。ファイル名だけが取得できるようになります。
まさにその通りでした、問題解決できました。
osamuyさん何度も何度もありがとう御座います。
No.2
- 回答日時:
> 退避先にファイルがある場合や更新がかかってしまった場合には不向きなような気がしました。
退避先にファイルが存在する場合の仕様を決める必要があります。上書きで問題なければそのままですし、世代管理が必要であれば、何世代保存するのかとかを決めるのが先決でしょう。
更新についても同様で、どのような更新パターンがあって、その場合はどのように退避ファイルを決定するのか、可能ならプロセス停止して更新が発生しないようにするとかの調整をするのが先決です。
そこらへんが決まっているなら、実装はどうとでもなるかと。
そういう回答が望みじゃなくて、スクリプトの細かい話なら、
・使用率の取得は、「df $dir|awk 'NR==2{sub("%","",$5);print $5}'」のほうがきれいかも。
・使用率の取得に同じコードが2回てくるので、関数化したい。
・上位三つ目がディレクトリだった場合、移動させるのはまずくないか。
・移動させたファイル名は分かっているのだから、移動先で再度lsするのは無駄では。
・compressより圧縮率の高いツール(gzipとか)使った方が良くないか。
――とか。
この回答への補足
回答ありがとう御座います。
今回の処理は、臨時対応の一環で作成しております。
すでに移動圧縮するファイルには世代番号が付いております。退避のシェルは通常動いているのですが稀に処理が追いつかなくなる事を考えての対応です。
ですので、このシェルを流すと通常流れているシェルと圧縮が重なる恐れがあります。
compressについてですが、gzipの方が圧縮率は高いことは承知ですが時間が掛かると言うことで、やめました。
>・移動させたファイル名は分かっているのだから、移動先で再度lsするのは無駄では。
実際移動されたファイルは上から3つ目ということしかわかっていませんのでファイル名まではわからないのです。そこで移動させたファイルをそのまま圧縮しょりしたいのですが無理でしょうか?
度々すいません。
No.1
- 回答日時:
set DIR1 = /tmp
set DIR2 = /work
set FILE1 = ファイル1
mv $DIR1/$FILE1 $DIR2/$FILE1
compress -f $DIR2/$FILE1
――という事ですか?
質問文のスクリプト(csh?)で圧縮はできてそうなので、
「ファイル1を変数設定して」っていうと、上記みたいな回答しか思いつかないのですが。
この回答への補足
回答ありがとう御座います。
言葉足らずですいません。現在以下のようなシェルを作成したのですが、ファイルを移動したあとその移動したファイルを圧縮したいのです。今は、lsで引っ掛けているのですが、若干問題点があります。
すでに退避先にファイルがある場合や更新がかかってしまった場合には不向きなような気がしました。
この点を踏まえてアドバイスなどお願いします。
#上位3つ目のファイルを移動し、圧縮処理
set NORMAL=0 # 正常終了時ステータス
set ABEND=9 # 異常終了時ステータス
set SHELLNAME = log_mv.sh
set LOGFILE = /opt/oracle/log/mv.log.`date '+%y%m%d%H%M'`
set SID = LE9A
echo $SHELLNAME:t ": start time : `date +%y/%m/%d:%H:%M:%S`" >> $LOGFILE
set CAPACITY = `df -k /arch001 | awk '{if ( $6 == "/arch001" ) print $5}' | sed 's/%//'`
echo "$CAPACITY"
while ($CAPACITY >= 90 )
unalias ls
set SRCDIRS = /arch001/$SID
set DESTDIRS = /arch101/$SID
set FILESINDIRES = (`ls -tr -1 $SRCDIRS/*`)
echo mv $FILESINDIRES[3] $DESTDIRS
mv $FILESINDIRES[3] $DESTDIRS
set ST = $status
if ( $ST == $NORMAL ) then
echo "mv 処理 OK" >> $LOGFILE
set DIRS = (`ls -t -1 $DESTDIRS/*`)
echo compress -f $DIRS[1]
compress -f $DIRS[1]
set ST = $status
if ( $ST == $NORMAL ) then
echo "compress 処理 OK" >> $LOGFILE
else
echo "compress 処理 NG" >> $LOGFILE
exit $ABEND
endif
else
echo "mv 処理 NG" >> $LOGFILE
exit $ABEND
endif
set CAPACITY = `df -k /arch001 | awk '{if ( $6 == "/arch001" ) print $5}' | sed 's/%//'`
end
echo $SHELLNAME:t ": end time : `date +%y/%m/%d:%H:%M:%S`" >> $LOGFILE
exit $NORMAL
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) ネットの文章をワードに貼り付けるとき、幅を広げる方法 6 2022/05/30 11:04
- 工学 過渡現象 RL回路で 回路方程式 Ri+L(di/dt)=E 定常解 is=E/R 過渡解 Ri+L 1 2022/06/08 21:47
- 数学 『iの微分』 7 2023/02/06 19:45
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- デジタルカメラ 動画撮影に使うレンズ。どちらのレンズがいいか悩んでいます 1 2023/01/02 18:21
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- 工学 CR発振回路 C1=C2=C=0.001【uF】 R1=R2=R3=16【kΩ】 R4は出力電圧が正 2 2023/05/10 19:13
- 画像編集・動画編集・音楽編集 連続質問です 動画ファイルの圧縮時のビットレートというのについて教えてください 2 2023/08/06 11:50
- 物理学 この問題における抵抗r1とxってどのように考えれば良いのでしょうか?トルクはT=P2/ωsなのでP2 1 2022/06/19 18:46
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自作のウェブサイトを友人に見...
-
Ubuntu系とCentOS系の違いはな...
-
[Linux初心者]Ubuntu22.04.3LTS...
-
ubuntu(linux)のシャットダウン...
-
ubuntuで デイスク/deb/loopと...
-
ubuntuのシャットダウンが進ま...
-
bashでシングルクォート内の変...
-
Windowsのローカルディレクトリ...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu on Xorgのログインについて
-
Linux のシェルスクリプトの強...
-
tarで纏める際に、複数場外した...
-
新しく買ったWin11のPCでLinux...
-
Linux全般なんですけど、Live u...
-
ワイルドカードの使い方
-
cronの@rebootでのdateコマンド...
-
Kali Linuxで起動できない - Mi...
-
ログにserver reached MaxReque...
-
Linuxについて質問です。 シェ...
-
linuxサーバーのキャッシュをク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ubuntu(linux)のシャットダウン...
-
bashでシングルクォート内の変...
-
ubuntuのシャットダウンが進ま...
-
Windowsのパソコンを使って仮想...
-
ubuntuで デイスク/deb/loopと...
-
AWSでSSH接続をしたいのですが...
-
Ubuntu on Xorgのログインについて
-
LinuxのノートパソコンでDVDコ...
-
linuxサーバーのキャッシュをク...
-
Postfixでドコモメールに送信す...
-
Windowsのローカルディレクトリ...
-
tarで纏める際に、複数場外した...
-
Linux のシェルスクリプトの強...
-
Linux Mint 日本語入力できなく...
-
ホストオンリーアダプタで接続...
-
ubuntuのサーバー(virtual box)...
-
VirtualBox ゲストOSにPC内蔵HD...
-
shellscript内のコマンドを、su...
-
Linux Ubuntu22.4の起動時エラ...
-
Ubuntu でinvalid filenameとな...
おすすめ情報